我是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
比较:
char string[] = "123 123";
printf("Original string:%s\n", string); //it shows 123 123
答案 0 :(得分:6)
问题是scanf。当您使用带有%s的scanf时,它会一直读取,直到它到达空格。 要阅读整行,您可以考虑使用fgets()。
答案 1 :(得分:5)
scanf
将空格视为字符串的结尾
因此,一旦遇到space
字符,它就会停止阅读。
如果是c样式数组\0
被认为是数组的结尾
初始化时,
char string[] = "123 123";
在第7个字符\0
的末尾隐式添加3
,它标记了此数组的结尾。
答案 2 :(得分:2)
这是正确的行为。默认情况下,scanf
读取字符串,直到它到达空格。
来自scanf
联机帮助页:
取值
匹配一系列非空白字符; 下一个指针必须是一个足够长的字符数组的指针 保持输入序列和终止 空字符('\ 0'),自动添加。 输入字符串在空格或最大字段宽度处停止, 以先到者为准。
答案 3 :(得分:1)
由于scanf()
的工作方式,您在此处看到了什么。您可以打印内部任何字符的字符串(无论它是否为空格)。 scanf()
只要遇到空格就会停止,因为它会考虑这个变量"完成"。
答案 4 :(得分:1)
scanf
扫描字符串直到任何空格。如果您需要阅读换行符,请使用fgets()
:
char string[64];
fgets(string, sizeof(string), stdin);
printf("%s", string); // should now contain any whitespace in the string.
答案 5 :(得分:0)