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

调用CString::Format接口格式化字符串时产生异常,可能是将当前的CString对象作为参数传给CString::Format接口导致的 调用CString::Format接口格式化字符串时产生异常,可能是将当前的CString对象作为参数传给CString::Format接口导致的。 阅读详情

前言

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

例子

类似这样调用:

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

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

解决过程

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

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

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

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

总结

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

OI 生涯回忆录 《Pilgrimage》 前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不 阅读详情

相关推荐

运算放大器噪声分析实战:从理论到TINA-TI仿真的完整指南

本文深入探讨运算放大器噪声分析的完整流程,从基础理论到TINA-TI仿真实践。详细解析噪声来源、运放噪声模型建立、手工计算方法,并结合TI工具进行高效仿真验证,提供低噪声电路设计优化策略,帮助工程师提升精密电子系统性能。

Jerry的专栏 948

【Debug】Expression: ("Incorrect format specifier", 0)

_vsnwprintf_s 在遇到%的时候,出现了Expression: ("Incorrect format specifier", 0)的提示错误! 测试代码如下: #include #include //printLogW void printLogW(const wchar_t* szLog, ...) { wchar_t cMsg[5120]; ::me

HelloKandy's Blog 5093

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

如何在C中使用`printf()`打印百分比字符

c printf打印字符串When writing a C program you might have the need to print the % percentage character using printf(). 编写C程序时,可能需要使用printf()打印%百分比字符。 Perhaps you are working on a program that calculates...

cuk0051的博客 1871

Vue3集成百度实时语音识别

Vue3集成百度实时语音识别

weixin_61769998的博客 548

史上最强量化工具库 Ta-Lib 从入门到精通,一篇文章就够了!

Ta-Lib 提供的 13 个关键指标,并配上详细的代码示例,确保你看完就能直接上手!🔥。

奔跑的蜗牛 9929

VC2010 CString.Format使用报错 error C2664

error C2664: “void ATL::CStringT::Format(const wchar_t *,...)”: 不能将参数 1 从“const char [12]”转换为“const wchar_t *”

phenixyf的专栏 5433

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

cstring 查找字符串 expression incorrect format specifier,0解决办法

注意特殊字符的输出方法。除了一般的要用转义字符\, 转义字符是c语言中表示字符的一种特殊形式。通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号(' ),用于表示字符常量的双撇号(”)和反斜杠(\)等。转义字符用反斜杠\后面跟一个字符或一个八进制或十六进制数表示。 转义字符 意义 ASCII码值(十进制) \a 响铃(B

u010392719的专栏 3158

linux arm64 Debian12移植操作手册

2023年6月10号Debian官方出了debian12 arm64版本的。如果需要完全适配这个系统的话,需要linux6.10版本。应客户的需求,需要在Debian11升级为Debian12版本。

qq_45147279的博客 2169

关于React Native Android找不到node的错误

最近,按照官方文档初始化了一个React Native项目,但是在Android端运行的时候,报了如下的一个错误。 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:recordFilesBeforeBundleCommandDebug'. Caused by: org.gradle.process.internal.ExecException: A problem occurred starting p

xiangzhihong8的专栏 4247

VS2010中CString Format出错

VS2010中 Format 用法:  我在项目中需要实现一个字符串的转化,代码如下:  CString mess; int x,y;  x = 640; y = 480; mess.Format("当前为:%d X %d",x,y); 这段代码是VC6.0中没有任何错误,但在VS2010中就有问题了,谁可以帮我解决下,谢谢,最好是在VS2010中编译没错误的才说,还请说下具体怎么做,

chaoyuezhejiu的专栏 1405

逆变器、转换器、DCDC、继电器等器件的原理和作用

交流电变成直流电的过程:整流==》滤波==》稳压。

m0_61973119的博客 8030

Invalid format specifier的解决方法

格式问题 {:.2f} √ {:,2f} × 用句号而不是用逗号

ANDyLEeZ的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

解决:Invalid format specifier

一定是你format函数中某一占位少了,或者格式不对(位置问题)

ZYYRWish_97的博客 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WTL-学习疑问

1、double转cstring用format函数报错 答:因为WTL版本的Format方法不支持浮点,这跟MFC不一样!!!!我一开始就搞错了 2、 WTL的TrimRight() 和TrimLeft()方法是用来剔除多余的空白空间,但是!MFC版本是剔除指定的任何字符/字符组,我之前用它来在MFC中剔除小数点后无效的0 3、在WTL中使用cstring ,定义在atlmisc.h中,在前面加上#define _WTL_USE_CSTRING,否则会出问题滴~ ...

xiyoubu的博客 465

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MFC中使用CString时遇见的问题

CString转换为int型使用_ttoi或者atoi直接进行类型转换; CString::Format()函数时报错:Buffer too small ……..。这是因为CString型的url在调用format函数时内存重新分配导致的错误,需要重新定义一个cstring类型的变量。 GetDlgItemText(IDC_EDIT1,url); GetDlgItemText(IDC_

panrong_pan的博客 1290

CString Format(_T("%s")出错

unicode环境下,CString Format格式化ansi字符串要用 %S

ahak2000的博客 4060

CString::Format出现的Buffer too small错误

CString::Format出现的Buffer too small错误 在调试的过程中,由于主框架程序调用了我自己封装的一个采集模块组件,这个组件采用mfc dll封装成COM的形式进行调用,但是在主框架程序中调用这个模块老是有问题,在显示采集模块窗口界面的时候就出现“Expression Buffer too small”的错误提示,如下图。   调试都没有办法进行,于是上网查找了下

《好好先生》专栏 2093

CString的安全与效率[转]

CString的安全与效率[转] 2011年07月01日 星期五 8:58 1. 安全使用CString   今天我花了差不多一下午的功夫,解决了一个很隐蔽的bug,包括修改和排除相关的可能存在隐患代码。 就是一个关于CString的使用问题,重点体现在Format上。 目前我们的代码里,对于Format的应用可以分为下面的几种方式:

未来软件 3866

处理iOS开发中的各种警告

iOS开发中我们会遇到各种警告,包括第三方不再支持更新导致的警告,苹果一些过时方法的警告,其中尤其是ASIHttpRequest的不支持更新导致有很多的警告,所以我在这里做了罗列 Semantic Warnings WarningMessage -WCFString-literal input conversion stopped due to an inpu...

3163

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

之前遇到如下一个问题—— 程序运行出错:f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c Line:244” Expression:("Buffer too small", 0). 最初以为是自己程序中sprintf使用不当造成的,就是就Grep出所有的sprintf,一个一个查,还是没有查出问题所在。 过了许久,已经忘

我的专栏 6723

关于ATL::CString格式化字符串崩溃

ATL::CString莫名崩溃

weixin_47488337的博客 477

C#使用String.Format常见报错

C#中使用String.Format(string format,object arg)连接字符串,format中添加带索引的占位符如:{0},然后就可以得到相应的字符串。其中会遇到几个常见的异常。 异常一、 FormatException: Index (zero based) must be greater than or equal to zero and less than t...

不文不武的禾文 6446
上一篇: #mark资源# chrome增加扩展程序
下一篇: windows 修改桌面快捷方式的名字
Quellaaa
博客等级 码龄9年 24粉丝 82原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值