加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fprintf,error:格式不是字符串文字,没有格式参数[-Werror = for

发布时间:2020-12-16 03:00:30 所属栏目:百科 来源:网络整理
导读:当我尝试在Ubuntu上编译fprintf(stderr,用法)时,我得到这个错误: error: format not a string literal and no format arguments [-Werror=format-security 但是当我在其他正在编译的linux发行版(RedHat,Fedora,SUSE)上编译时. 任何人都有想法? 解决方法 你
当我尝试在Ubuntu上编译fprintf(stderr,用法)时,我得到这个错误:
error: format not a string literal and no format arguments [-Werror=format-security

但是当我在其他正在编译的linux发行版(RedHat,Fedora,SUSE)上编译时.

任何人都有想法?

解决方法

你应该使用fputs(用法,stderr);

如果您不进行格式化,则不需要使用fprintf.如果要使用fprintf,请使用fprintf(stderr,“%s”,Usage);

Ubuntu上的default compiler flags包括-Wformat -Wformat-security,这是什么给出了这个错误.

那个标志被用来防止引入安全相关的bug,想象一下
如果你以某种方式做到这一点会发生:

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

这将是一样的
fprintf(stderr,“Usage%s,[options] …]”);这是错的.

现在,Usage字符串包含格式说明符%s,但是您不能为fprintf提供该参数,从而导致未定义的行为,可能会导致程序崩溃或允许其被利用.如果您传递给fprintf的字符串来自用户输入,则更为相关.

但是如果你做了fprintf(stderr,“使用%s,[options] …]”);没有这样的问题. 2.%s不会被解释为格式指定器.gcc可以警告这一点,默认的Ubuntu编译器标志使它成为编译器错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读