gpt4 book ai didi

c - GCC 警告我关于指令输出截断

转载 作者:行者123 更新时间:2023-12-05 01:24:33 24 4
gpt4 key购买 nike

我已经用 clang 编译了一段时间,但是现在我回到了 GCC (8.3),我收到了很多非致命警告。

例如,我有以下代码行以固定宽度格式“(度)(分钟)。(秒)(W | E)”打印给定的经度。不过,在此之前,我有计算 degrees 的代码。 , minutes , 和 seconds同时确保所有值都是合理的(例如,-90 ≤ degrees ≤ 90 无论如何)。

所以这可以完美地编译和运行:

snprintf(pResult, 10, "%03d%02u.%02u%c", degrees, minutes, seconds, (degrees < 0 ? 'W' : 'E'));

但是,GCC 对此给出了很多警告:

aprs-wx.c: In function ‘myFunction’:
aprs-wx.c:159:39: warning: ‘%c’ directive output may be truncated writing 1 byte into a region of size between 0 and 2 [-Wformat-truncation=]
snprintf(pResult, 10, "%03d%02u.%02u%c", degrees, minutes, seconds, (decimal < 0 ? 'W' : 'E'));
^~
In file included from /usr/include/stdio.h:867,
from aprs-wx.c:21:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:10: note: ‘__builtin___snprintf_chk’ output between 10 and 12 bytes into a destination of size 10
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
__bos (__s), __fmt, __va_arg_pack ());
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我完全清楚,如果我的代码未能清理输入,则可能会出现值截断。如何禁用此警告,或者更好的是,调整我的代码,以便 GCC 即使使用 -Wall 也不会提示放?

最佳答案

How can I disable this warning, or better yet, adjust my code so that GCC won't complain even with -Wall set?



使用 %来限制宽度。
snprintf(pResult, 10, "%03d%02u.%02u%c", 
degrees%100, minutes%100u, seconds%100u, (degrees < 0 ? 'W' : 'E'));
// ^ ^
// signed , unsigned
// max 3 characters, max 2 characters

您的结果可能会有所不同。

关于c - GCC 警告我关于指令输出截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936803/

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