2015-02-06 498 views
4

我設置了一個大小爲10的char數組,並且想要檢查允許的輸入的實際大小。如何將scanf用於char數組輸入?

我測試

123456789; 1234567890; 123456789123456789

有趣的是,所有的人都過去了,有合適的輸出,是

123456789; 1234567890; 123456789123456789 

它混淆了我很多,因爲我認爲剩下的兩個是錯誤的輸入。

這是否有意義,或者它是一個編譯器的區別?

這是代碼

#include <stdio.h> 
main()  
{  
char input[10];  
scanf("%s", input);  
printf(input);  
} ' 

回答

5

scanf()格式說明%s,直到遇到一個空間掃描輸入。就你而言,你所看到的是未定義的行爲。 您的陣列可以容納10 char s,但是您正在寫出它的邊界。

雖然您現在正在得到預期的答案,但並不總是這樣,可能會導致崩潰。

建議使用諸如fgets()之類的函數來處理緩衝區溢出。