踩过的坑—CString的format方法报错Incorrect format specifier

前言

在CString上踩过很多坑,避免以后踩过相同的坑,就把该坑记录~
背景:在转换环境变量函数里输出日志多次调用了format方法,导致程序崩溃。

例子

类似这样调用:

CString strPath;
// ....
//strPath 从配置文件中读入,格式如:%installPath%/test.dat
OutputLog(L"path is %s", strPath);

然后程序出现这样的错误:

解决过程

这个现象是多个线程到同个函数里输出该条日志触发的,当时以为是多线程导致的,但是OutPutLog是支持多线程的,所以排除这个可能。

跟进去调试发现是告知某个内存状态无效,这时有以为是编译选项是非mt导致的,改为mt还是不对,然后就百度了。。。

流下悔恨的泪水,应该早点想到百度dᕦ(・ㅂ・)ᕤ

百度搜索“Incorrect format specifier”后发现也有朋友遇到这样的错误,见链接:https://blog.csdn.net/hellokandy/article/details/59110442

总结

出现该问题的原因是:path里面有%,导致CString的format函数处理%字符出错,因为其处理%字符时,会把紧接着的字符一起处理,如果处理时发现组成的字符不认识(即不符合规定,不是%s之类的),就会报这个错误。若要输出%字符,那么应该写成%%。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值