intの場合
scanfの第二引数には変数のアドレスを指定する必要があることは分かります。
c
1int main(void){ 2 int a; 3 scanf("%d",&a); 4 printf("%d\n",a); 5}
100 //入力 100 //出力
文字列の場合
文字列の場合、文字列の変数名
は&文字列の変数名[0]
(文字列の配列の先頭アドレス)を意味するから、変数名だけ書けば良いことも分かります。
c
1int main(void){ 2 char s[100]; 3 scanf("%s",s); //このsは&s[0]と同じ意味 4 printf("%s\n",s); 5}
aiueo //入力 aiueo //出力
1文字の文字列の場合
1文字の文字列の場合も、上記の通常の文字列と同じ記法で動作すると思ったのですがなぜか動作しません(&が必要)。
c
1int main(void){ 2 char c; //char c は char c[1]と同じ意味 3 scanf("%c",c); //このcは&c[0]と同じ意味 4 printf("%c\n",c); 5}
//scanfが作動せず、何も起こらずプログラムが終了する //scanf("%c",&c)とするとちゃんと動く
これは何故なのでしょうか。
補足情報
C99,gcc
c に「文字列」という変数は無いです。

回答2件
あなたの回答
tips
プレビュー