警告:'__builtin_snprintf' 输出可能会在最后一个格式字符 [-Wformat-truncation=] 之前被截断

warning: '__builtin_snprintf' output may be truncated before the last format character [-Wformat-truncation=]

warning: ‘__builtin_snprintf’ output may be truncated before the last format character [-Wformat-truncation=]
  "%s", evspan->text);
     ^

len = strlen(evspan->text);
evspan->ent->content = malloc(len+1);

snprintf(evspan->ent->content, len,
"%s", evspan->text);

我在 gcc 8 上看到了这个警告。如何在不使用 -Wformat-truncation 选项的情况下防止这种情况发生?

snprintf 的第二个参数是缓冲区的长度,而不是最大字符串长度。

调用应该是:

snprintf(evspan->ent->content, len + 1, "%s", evspan->text);

这与传递给 malloc 的长度匹配。


关于 snprintf 不是最佳选择的评论确实适用,如果您的完整代码与此处显示的一样简单。