scanf如何处理空白区域?

qwr*_*qwr 2 c string

我是Cstring的新手,很抱歉提出愚蠢的问题,请帮忙.

char string[10];

printf("Give me your last name:\n");
scanf ("%s", string);                   //if i type 123 123
printf("Original string:%s\n", string);  //it shows 123
Run Code Online (Sandbox Code Playgroud)

相比于:

char string[] = "123 123";

printf("Original string:%s\n", string);  //it shows 123 123
Run Code Online (Sandbox Code Playgroud)

Maz*_*Maz 6

问题是scanf.当您使用带有%s的scanf时,它会一直读取,直到它到达空格.要阅读整行,您可能需要考虑使用fgets().

  • 永远,永远不要使用`gets()`。改用`fgets()` 或`getline()`。 (3认同)

Alo*_*ave 5

scanf将空格视为字符串的结尾.
所以一旦遇到一个space角色就会停止阅读.

而在c风格的情况下,数组\0被认为是数组的结尾.
初始化时,

char string[] = "123 123";
Run Code Online (Sandbox Code Playgroud)

A \0隐含地添加在第7个字符的末尾3,它标记了该数组的结尾.