CString.Format调用失败另一例(buffer too small vsprintf.c Line:244)

博客探讨了在使用CString.Format时遇到的'Buffer too small'错误,该错误不总是发生,且在不同团队间同时出现,具有一定的不可预测性。错误源于将字符串对象本身作为Format参数导致,MSDN对此有相关记载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前遇到如下一个问题——

程序运行出错:f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c Line:244”
Expression:("Buffer too small", 0).


最初以为是自己程序中sprintf使用不当造成的,就是就Grep出所有的sprintf,一个一个查,还是没有查出问题所在。

过了许久,已经忘了是哪个线索让我查出来是CString.Format时使用自身作为参数而调用失败了。(奇怪的是这个失败并不总会发生。我们程序中“隐藏”的这个问题年初就存在,可一直没有被发现过,而且可以肯定这段代码测试时被多次执行过。更奇怪的是,这个问题是两个团队几乎同时发现的。难道下面说的“不可预测”还与系统时间有关吗?至今无解!)


MSDN中对这个错误使用有过特别的记载——

The call will fail if the string object itself is offered as a parameter to Format. For example, the following code will cause unpredictable results:

CAtlString str = _T("Some Data");
str.Format(_T("%s%d"), str, 123);   
// Attention: str is also used in the parameter list.   


参考阅读——

1. 《 CString.Format使用一例》 http://blog.youkuaiyun.com/mxclxp/article/details/7393237
2. 《vc中CString::Format出现的Buffer too small错误(转)》 http://blog.youkuaiyun.com/zhulingfeng8726/article/details/7077341


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值