背景
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