2012-01-10 57 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 
相關問題