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となる!