【发布时间】:2018-05-01 05:59:02
【问题描述】:
在我的代码中,我使用以下行来打印 char readbuffer[1]; 数组(大小为 1 的字符数组):
printf(readbuffer);
这在我的电脑(Arch Linux,gcc 版本7.3.1+20180406-1)上编译和工作没有问题。但是,当我将包含此代码的作业提交给我的导师时,他实际上在编译我的代码时收到了编译器警告:
shell.c:89:20: warning: format not a string literal and no format arguments [-Wformat-security]
printf(readbuffer);
他使用的是 16.04 LTS 版本的 gcc/clang 版本。我们都使用相同的编译器标志。
这是为什么?这在新的gcc 版本中突然不再是问题了吗?如果是,为什么不呢?
请注意:我不想知道如何解决这个问题,只是想知道为什么警告与 gcc 版本不一致。
【问题讨论】:
-
如果您只想打印单个字符,请使用
putchar。无需设置缓冲区并 NUL 终止它(您没有这样做,导致未定义的行为)。
标签: c gcc compiler-warnings gcc-warning linux-distro