大家好!
下面:
#include <stdio.h>
char* getStr( char *c ){
scanf( "%s" , c );
return c;
}
int main(){
char str[ 100 ];
getStr( str );
printf( "%s" , str );
return 0;
}
请您解释为什么字符串只打印到第一个“空格”。 即
输入:asd asd
输出:asd
答案 0 :(得分:14)
这是scanf
的合同(见http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html)。它会一直读到下一个空格。
您可以将格式字符串更改为以"%s %s"
两个字符串读取,这将读取由空格分隔的两个字符串。
答案 1 :(得分:7)
因为那是scanf
所做的。如果您想要读取字符串直到换行符,请使用gets
编辑:或其缓冲区溢出安全表兄fgets
(谢谢@JayC)
答案 2 :(得分:2)
来自scanf
手册页:
Matches a sequence of non-white-space characters
这回答了你的问题。
如果你需要匹配空格,那么你可能需要在循环中处理它,或者只是使用更传统的方法来阅读它。
答案 3 :(得分:0)
如果你想用空格输入字符串,你也可以使用fgets()函数,如下所示:
char str[50];
printf("Enter a string: ");
fgets(str,50,stdin);
printf("%s",str); //print the accepted string