【发布时间】:2019-12-09 17:27:15
【问题描述】:
我正在编译这段代码,其中有一行:
snprintf(target, 11, "%02ld-%02ld-19%02ld", day, month, year);
... 在验证所有 3 个值都有效后执行;具体来说,那一年在 0 到 99 之间。
但是,最新版本的 GCC,当使用 -Wextra 运行时,抱怨:
warning: ‘%02ld’ directive output may be truncated writing between 2 and 20 bytes
into a region of size 3 [-Wformat-truncation=]
我宁愿不完全禁用此警告;甚至在本地禁用它。相反,我想知道我是否可以以某种方式“说服”GCC 三个参数的值范围,从而防止警告。
是的,这是相当丑陋的代码,它重新发明了轮子,应该使用特定于语言环境的日期格式化例程,无需教我;不是我的代码。
【问题讨论】:
-
在你的例子中,当我将 11 更改为更小的值时,我只能看到这个警告。你能发布一小段代码来重现警告吗?
-
This question 似乎解决了一个相关问题。
-
@Gerd:感谢您的链接;它是相关的,但不是欺骗,因为在这种情况下截断是可能的,而在我的情况下 - 它不是。
-
GCC 的哪个版本? tio.run/…
标签: c printf gcc-warning format-truncation