Cにおけるscanf()関数の文字列読み出しの問題について

1098 ワード

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     char s_name[20];
 6 
 7     scanf("%s", s_name);
 8     printf("Hello, %s!
", s_name); 9 10 return 0; 11 }

この簡単なコードについて、Step henのような名前を入力すると、出力は次のように分かりやすいです.
Hello, Stephen!
これは分かりやすいですが、Step hen Prataのようなより完全な名前を入力すると、出力結果は何ですか.
上記のように、出力結果は当然です.
Hello, Stephen Prata!
しかし、実際の出力は次のとおりです.
Hello, Stephen!
どうしてですか.これは、scanf()関数が文字列を読み出す場合、空白文字スペース(blank)、タブ(tab)、または改行文字(newline)に遭遇すると、読み取りが停止するためである.すなわち、上記scanf()関数は「Step hen」の数文字しか読み取れず、空格子およびその後の「Prata」は読み取られないため、最終s_name[]は文字列「Step hen」しか得られず、最終的にはHello,Step henとなる!