fprintf,error:格式不是字符串文字,没有格式参数[-Werror = for
当我尝试在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); 这将是一样的 现在,Usage字符串包含格式说明符%s,但是您不能为fprintf提供该参数,从而导致未定义的行为,可能会导致程序崩溃或允许其被利用.如果您传递给fprintf的字符串来自用户输入,则更为相关. 但是如果你做了fprintf(stderr,“使用%s,[options] …]”);没有这样的问题. 2.%s不会被解释为格式指定器.gcc可以警告这一点,默认的Ubuntu编译器标志使它成为编译器错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |