sprintf_s的教訓


    sprintf_s 是個比sprintf更安全的函數,今天在使用的過程中犯了個錯誤,代碼的大致意思如下

 1 void Test_sprintf_s()
 2 {
 3     char    buff[64];
 4 
 5     memset(buff, 0, sizeof(buff));
 6 
 7     sprintf_s(buff, sizeof(buff), "AAAAAA-");
 8 
 9     sprintf_s(buff+strlen(buff), sizeof(buff), "BBBBBBB-");
10 
11 }

  上面的第9行犯了個錯誤,相信你也能看出來。

  奇怪的是在Release版本下沒有問題,Debug下才會導致崩潰,並出現下述提示:

 

  研究下來,發現sprintf_s執行后,會把整個緩沖區的尾部填滿 0xFE。如下圖:

毫無疑問,執行到代碼第9行,buff后的內存也被錯誤的填寫了0xfe,不出錯才怪。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM