sprintf的缓冲区溢出

本文详细介绍了在C++编程中,使用string与sprintf进行字符串操作时遇到的缓冲区溢出问题,并通过使用snprintf函数解决了这一问题。文中包括问题现象、原因分析以及解决方案。
 

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

转载于:https://www.cnblogs.com/vanishfan/p/3314183.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值