为什么输入在空格字符后断开

时间:2012-01-10 12:52:24

标签: c string space

大家好!

下面:

#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

4 个答案:

答案 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