gcc -Wformat-truncation警告正在提出

时间:2018-11-16 09:34:24

标签: c gcc

gcc 7.1引入了一个新的警告,告诉您是否使用诸如snprintf之类的函数,并且您的参数将导致输出截断。

documentation意味着仅当您不检查返回值并根据返回值采取行动时才会引发:

  

由-Wformat启用的-Wformat-truncation的1级采用了   保守的方法仅警告对有界函数的调用    未使用其返回值的 ,这很可能导致   输出截断。

这是一个示例编译单元,使用版本7.3.0进行了编译,可以说明该问题。

#include <stdio.h>
#include <stdlib.h>

int main() {

  char w;

  int size = snprintf(&w, 1, "%s", "hello world");
  if(size<0) {
    abort();
  }

  char *buffer = malloc(size+1);
  snprintf(buffer, size+1, "%s", "hello world");

  printf("Wrote %d characters: %s\n", size, buffer);
  return 0;
}

像这样编译:

$ gcc -Wformat-truncation=1 test.c
test.c: In function ‘main’:
test.c:8:31: warning: ‘%s’ directive output truncated writing 11 bytes into a region of size 1 [-Wformat-truncation=]
   int size = snprintf(&w, 1, "%s", "hello world");
                               ^~   ~~~~~~~~~~~~~
test.c:8:7: note: ‘snprintf’ output 12 bytes into a destination of size 1
   int size = snprintf(&w, 1, "%s", "hello world");

我误解了文档吗?我看不到如何检查返回值而已。

参考:previous SO question表示不应提出警告。我真的不喜欢禁用警告并且通常使用-Wall -Werror进行编译,因此,我希望在这里提供一些指导。

0 个答案:

没有答案