分类: 技术2010-03-07 15:26 362人阅读 评论(0)  举报

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

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

  1. snprintf(buf, bufsize, "You typed /"%s/"", answer);

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

05-03 21:48