2012-01-10 121 views
2

大家好!为什么输入在空格字符后中断

这里:

#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

+1

我闻到缓冲区溢出。 – ThiefMaster 2012-01-10 12:54:09

+0

我不知道准确,但在返回之前尝试在'getStr'函数中打印'c'。 – Azodious 2012-01-10 12:55:13

回答

7

因为这就是scanf所做的。如果你想读一个字符串,直到换行,使用gets编辑:或它的缓冲区溢出安全表妹fgets(感谢,@JayC)

+4

或者它的缓冲区溢出安全的堂兄'fgets' – JayC 2012-01-10 12:57:13

14

这就是scanf合同(参见http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html)。它读取,直到遇到下一个空白。

您可以更改您的格式字符串以读取两个字符串作为"%s %s",它将读取由空格分隔的两个字符串。

+1

你的回答也是绝对正确的。非常感谢你! – 2012-01-10 13:08:14

2

scanf手册页:

Matches a sequence of non-white-space characters 

的答案你的问题。

如果您需要匹配空白,那么您可能需要在循环中处理它,或者只是使用更传统的方法来读取它。

0

如果你想利用输入字符串用空格,您还可以用fgets()函数,如下所示:

char str[50]; 
printf("Enter a string: "); 
fgets(str,50,stdin); 

printf("%s",str); //print the accepted string 
相关问题