gpt4 book ai didi

c - 为什么 gcc -Wall 会发出有关零长度格式字符串的警告?

转载 作者:太空狗 更新时间:2023-10-29 16:27:46 27 4
gpt4 key购买 nike

我搜索了一下有关这方面的信息,但没有找到令人满意的信息。函数调用是否有一些特殊行为

sprintf(someString, "");

这解释了为什么这是警告(在带有 -Wall 的 gcc 上)?我只设法发现 C 标准允许零长度格式字符串。

我试过下面的例子

#include <stdio.h>

int main()
{
char str[2] = {'a', 'a'};
sprintf(str, "");
printf("\'%c\'\'%c\'\n", str[0], str[1]);
return 0;
}

打印出来

'''a'

这正是我希望看到的。那么,为什么要发出警告?

最佳答案

GCC 发出警告的事实通常与构造是否合法 C 无关,而是 GCC 开发人员是否认为它可能表明您的意思与您编写的内容不同,或者只是糟糕的风格。以下是一些示例:

  • if (x = 0) — 您几乎肯定是指 if (x == 0)
  • printf(str) — 您几乎肯定是指 fputs(str, stdout)printf("%s", str) ;如所写,代码非常危险。
  • if (foo == bar & MASK) — 你几乎肯定是指 if (foo == (bar & MASK))

等等

在您的情况下,我认为 GCC 质疑您为什么调用 sprintf(String, "") 来执行与 String[0]=0; 相同的操作(后者更短、更快、更清晰)。

关于c - 为什么 gcc -Wall 会发出有关零长度格式字符串的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926674/

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