sprintf的缓冲区溢出

时间:2021-02-08 06:58:43
 

sprintf的缓冲区溢出

分类: 技术   362人阅读  评论(0)  收藏  举报

今天,调试sector的时候遇到一个特奇怪的问题,程序会在取string的c_str()的时候core掉,百思不得其解。仔细读了一下代码:

string先用c_str()取过一次值,然后sprintf再次调用string的c_str,将字符串存在一个新的区域里面,这时候gdb了一下,发现在string比较长的时候,sprintf后的string的内存结构被破坏,好奇怪啊,怎么会被破坏了呢?找你几圈,发现罪魁就sprintf上面,原来是sprintf的缓冲区溢出,造成内存的破坏,天理啊!!解决方案是使用snprintf函数

 

[cpp]  view plain copy
 
  1. snprintf(buf, bufsize, "You typed /"%s/"", answer);  

 

bufsize如果值设置为0的话,snprintf会自动设置一个合适的bufsize