【求助】C++编译告警

勤奋的执着 2016-12-16 01:28:33

341 static char sformat[40] = {0};
342 snprintf(sformat, sizeof(sformat), "%s0%ud", "%", m_iSeqLength);
343 snprintf(sFileNameSeq, sizeof(sFileNameSeq), sformat, atol(sTmp));



求助,出现下面这种编译告警怎么解决,谢谢~~

TCdrTransformBase.cpp:343: warning: format not a string literal, argument types not checked
TCdrTransformBase.cpp:343: warning: format not a string literal, argument types not checked
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2016-12-16
  • 打赏
  • 举报
回复
http://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html#Diagnostic-Pragmas
Dobzhansky 2016-12-16
  • 打赏
  • 举报
回复
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wxxxx"
#pragma GCC diagnostic pop


试试可以不
勤奋的执着 2016-12-16
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
编译时不能知道你的字符串中的内容,所以不会对后面的参数进行检查,这只是一个警告 另外,%%可以表示一个%符号,所以你第一个snprintf可以改成: snprintf(sformat, sizeof(sformat), "%%0%ud", 1);
那这种警告不容易去掉吗。。 因为我们公司要求编译必须没有新增告警的。。
paschen 2016-12-16
  • 打赏
  • 举报
回复
编译时不能知道你的字符串中的内容,所以不会对后面的参数进行检查,这只是一个警告 另外,%%可以表示一个%符号,所以你第一个snprintf可以改成: snprintf(sformat, sizeof(sformat), "%%0%ud", 1);
勤奋的执着 2016-12-16
  • 打赏
  • 举报
回复
引用 1 楼 Dobzhansky 的回复:
编译时会扫描格式化字符串中的 % 格式并分析,据此提出一些警告。 而 sformat 是运行时生成的,编译器没法分析了,所以警告一下。 你确定格式没问题, 可以在这行禁用一下这个警告 #pragma warning(disable:警告号) 343 #pragma warning(default:警告号)
不好意思,我忘说系统了,我用的是linux上的CC编译器,不是VC
Dobzhansky 2016-12-16
  • 打赏
  • 举报
回复
编译时会扫描格式化字符串中的 % 格式并分析,据此提出一些警告。
而 sformat 是运行时生成的,编译器没法分析了,所以警告一下。

你确定格式没问题, 可以在这行禁用一下这个警告
#pragma warning(disable:警告号)
343
#pragma warning(default:警告号)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧