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

前端之家收集整理的这篇文章主要介绍了fprintf,error:格式不是字符串文字,没有格式参数[-Werror = format-security前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我尝试在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编译器标志使它成为编译器错误.

原文链接:https://www.f2er.com/c/112737.html

猜你在找的C&C++相关文章