sprintf的缓冲区溢出

 

sprintf的缓冲区溢出

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

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

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

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

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

原文地址:https://www.cnblogs.com/vanishfan/p/3314183.html