2014-02-17 58 views
0

我想使用scanf在C++中讀取字符串。我試過使用scanf在C++中讀取字符串

char cmd[40]; 
scanf("%s", cmd); 
string str(cmd); 

但是這讓我想到一個字符串加上一些無意義的字符。

+0

請確保您進入再沒有其他40個符號 – Avt

+0

我不是。 C++正在添加字符,以便有40個字符。 – user2062607

+1

爲什麼在C++中使用scanf?也使用有限的scanf字符串,所以你不能用盡預先分配的數組。 – Xarn

回答

6

scanf%s說明符將在輸入字符串之後存儲空終止符,以防止垃圾字符進入字符串......除非您的代碼具有未定義的行爲。

您的問題很可能是輸入溢出緩衝區,導致未定義的行爲;在沒有適當緩衝區大小的情況下使用%s說明符時,scanf可能會寫入緩衝區的邊界之外。那時你不能保證程序的行爲。

切勿使用%sscanf wihtout提供一個緩衝區大小:

char cmd[40]; 
scanf("%39s", cmd); 
string str(cmd); 
+0

對不起。我可能不夠清楚。我不知道弦的精確大小。我只知道最多40個。 – user2062607

+2

@ user2062607:將緩衝區41設置爲 –

+0

@ user2062607您給scanf的緩衝區大小是它讀取的最大值。如果輸入字符串較短,那麼scanf將在此之前停止。正如Mooing Duck所說,如果字符串的長度可以是40個字符,那麼會有41個字符的緩衝區,並告訴scanf最多讀取40個字符。 – bames53