背景
scanfを使っていて、その動作に疑問を持ったので質問させていただきました。
コード
#include <stdio.h> int main(void){ char test[100]; scanf("%s",test); printf("%s",&test); scanf("%s",test); printf("%s",&test); }
疑問に思ったこと
最初のscanf
で、test
にabcdefghi
という文字列を入力した後に、
次のscanf
でtest
にzzzzz
という文字列を入力すると、最後のprintf
において・・・
1:zzzzz
と表示される。
2:zzzzzfghi
と表示される。
この1と2どちらが得られるのだろうと思い、実験したところ、
zzzzz
という文字列を得ました。
ということはこの結果から、
scanfは代入する配列を初期化してから代入する関数であり、
最初のscanfで入力された文字列は次のscanfで上書きされるのではなく、
次のscanfで一度配列がすべて初期されてから次の入力が代入されている。
という動作なのだろうと思ったのですが、この認識で間違いはないでしょうか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/05 15:20
退会済みユーザー
2020/08/05 15:35