我想使用scanf在C++中讀取字符串。我試過使用scanf在C++中讀取字符串
char cmd[40];
scanf("%s", cmd);
string str(cmd);
但是這讓我想到一個字符串加上一些無意義的字符。
我想使用scanf在C++中讀取字符串。我試過使用scanf在C++中讀取字符串
char cmd[40];
scanf("%s", cmd);
string str(cmd);
但是這讓我想到一個字符串加上一些無意義的字符。
scanf
與%s
說明符將在輸入字符串之後存儲空終止符,以防止垃圾字符進入字符串......除非您的代碼具有未定義的行爲。
您的問題很可能是輸入溢出緩衝區,導致未定義的行爲;在沒有適當緩衝區大小的情況下使用%s
說明符時,scanf
可能會寫入緩衝區的邊界之外。那時你不能保證程序的行爲。
切勿使用%s
與scanf
wihtout提供一個緩衝區大小:
char cmd[40];
scanf("%39s", cmd);
string str(cmd);
對不起。我可能不夠清楚。我不知道弦的精確大小。我只知道最多40個。 – user2062607
@ user2062607:將緩衝區41設置爲 –
@ user2062607您給scanf的緩衝區大小是它讀取的最大值。如果輸入字符串較短,那麼scanf將在此之前停止。正如Mooing Duck所說,如果字符串的長度可以是40個字符,那麼會有41個字符的緩衝區,並告訴scanf最多讀取40個字符。 – bames53
請確保您進入再沒有其他40個符號 – Avt
我不是。 C++正在添加字符,以便有40個字符。 – user2062607
爲什麼在C++中使用scanf?也使用有限的scanf字符串,所以你不能用盡預先分配的數組。 – Xarn