gpt4 book ai didi

c - fprintf,错误 : format not a string literal and no format arguments [-Werror=format-security

转载 作者:IT王子 更新时间:2023-10-29 00:03:04 48 4
gpt4 key购买 nike

当我尝试在 Ubuntu 上编译 fprintf(stderr,Usage) 时,我遇到了这个错误:

 error: format not a string literal and no format arguments [-Werror=format-security

但是当我在其他 linux 发行版(RedHat、Fedora、SUSE)上编译时编译成功。

有人有想法吗?

最佳答案

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

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

default compiler flags在 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 编译器标志使其成为编译器错误。

关于c - fprintf,错误 : format not a string literal and no format arguments [-Werror=format-security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260409/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com