天天看點

字元串越界問題

場景:當我們使用字元串的時,稍不注意就會使用錯誤,導緻字元串越界,也就是字元後面有一些莫名其妙的字元。

1  先看下面代碼

const char* str1 = "tests";
  char str2[5] = {'t','e','s','t','s'};
  
  std::cout<< "str1: " << str1<<endl;
  std::cout<< "str2: " << str2<<endl;      

輸出結果為:

str1: tests
str2: tests燙燙燙燙燙台x
請按任意鍵繼續. . .      

分析原因:預設情況下  “tests” 這樣寫,s後面自動加了 '\0' ,但是如果你是數組,就沒有加了。

解決方法:在把數組大小加 1 在後面添加 '\0' 

提示:這樣的問題在對檔案讀寫的時候也會出現,比如你在Linux下用C語言寫個指令行的FTP的上傳或下載下傳功能時,你是每一次讀寫 1KB
但是,寫到最後的時候,可能沒有 1 KB,這時你發送 1KB的時候,發送字元串已經越界了,就會導緻檔案空洞,是以發送字元串的
個數為fread的傳回值,即讀取的字元個數,這樣就不會多發的現象。