栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

fprintf,错误:格式不是字符串文字,并且没有格式参数[

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

fprintf,错误:格式不是字符串文字,并且没有格式参数[

你应该用

fputs(Usage, stderr);

如果您不进行格式化,则无需使用fprintf。如果要使用fprintf,请使用

fprintf(stderr, "%s", Usage);

Ubuntu上的默认编译器标志包括

-Wformat -Wformat-security
产生此错误的原因。

该标志用作防止引入与安全相关的错误的预防措施,想象一下如果您以某种方式这样做会发生什么:

char *Usage = "Usage %s, [options] ... ";...fprintf(stderr, Usage);

这与

fprintf(stderr, "Usage %s, [options] ... ]");
错误是一样的 。

现在,该

Usage
字符串包含一个格式说明符,
%s
但您不向提供该参数
fprintf
,从而导致未定义的行为,有可能使您的程序崩溃或被其利用。如果您传递给fprintf的字符串来自用户输入,则此设置更为相关。

但是,如果这样做

fprintf(stderr,"%s", "Usage %s, [options] ... ]");
,就不会有这样的问题。2.
%s
不会被解释为格式说明符。gcc可以发出警告,默认的Ubuntu编译器标志使其成为编译器错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号