首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在_snprintf - C++中验证格式说明符

在_snprintf - C++中验证格式说明符
EN

Stack Overflow用户
提问于 2015-05-28 12:54:48
回答 1查看 147关注 0票数 0

在我的一个项目中,我有一个专用的string类(名为class stringXYZ),它管理所有的字符串操作。但是由于它的缺点,我们想用std::string代替它。我们不想再换了。问题是stringXYZ有一个operator const char*()重载,所以每当我将stringXYZ交给任何printfsprintf_snprintf时,它都会转到char*。我们在std::string中没有这样的特性。甚至Microsoft的编译器也无法找到以下问题:

代码语言:javascript
复制
char szBuff[255] = {0};
std::string strErr = "Improper arguments";

_snprintf(szBuff, sizeof(szBuff), "Error = %s", strErr);

以前,由于stringXYZ类重载了const char*运算符,所以strErr用于正确地转换。但是现在,当我移到std::string时,我无法检测到这个错误。一种选择是将变量的名称从strErr更改为strErr123,编译和验证格式说明符。但这需要很长时间,因为我们有很多字符串变量。我选择了静态代码分析器,发现FlawFinder对我的情况很有用。但是当我在运行一台windows机器时,它的安装就被困住了。建议我使用一些免费/开源的静态代码分析器来验证格式说明符,或者其他一些方法,通过这些方法我可以验证格式字符串。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-05-28 17:16:13

如果使用g++编译器,您将得到:

错误:无法传递非复制类型的对象'std::string {aka类std::basic_string}‘通过’.‘

警告:格式化'%s‘期望类型为'char*’的参数-Wformat=

clang++对此也有类似的警告/错误。

注意,即使stringXYZ有一个operator const char*,实现也定义了如何通过省略号(.)传递不可复制的类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30507195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档