Cで文字列を入力して印刷しようとしています。私のサンプルコードは以下の通りである:問題がある固定長文字列をCの入力として受け取ります
#include<stdio.h>
main()
{
char a[5];
scanf("%[^\n]a",a);
printf("%s",a);
}
、私は当初5として文字列の長さを想定している。しかし、私は5以上の長さの文字列を取る場合、それが正常に動作します。なぜこうなった?許可された文字列の長さは5未満であってはなりませんか?
「*どうしてですか?*」未定義の動作は未定義です。 "*許可される文字列の長さは*"誰に許可されていないのですか? 'a 'の第1要素のアドレスを' scanf() 'に(暗黙的に)渡します。どのくらいスキャンするかを明示的に伝える必要があります。 – alk
私はchar a [5]を宣言すると、これは実際には何を意味していますか? @alk – user5411115
また、 'a'はfloatをスキャンします。 "文字列"をスキャンするには 's'を使います。 5-1 = 4の長さの文字列を可能にする 'char [5]'を定義している場合。 Cは "文字列"の '0'ターミネータを格納するために' char'を1つ必要とします。 'scanf()'に4つの 'char'をスキャンするように指示するには'%4s'を使います。 – alk