GCC 8 添加了-Wstringop-truncation
警告。来自https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944:
在 GCC 8.0 中通过 r254630 为错误 81117 添加的 -Wstringop-truncation 警告专门用于突出可能意外使用 strncpy 函数,该函数从源字符串中截断终止 NUL 字符。请求中给出的此类滥用的示例如下:
char buf[2];
void test (const char* str)
{
strncpy (buf, str, strlen (str));
}
我收到与此代码相同的警告。
strncpy(this->name, name, 32);
warning: 'char* strncpy(char*, const char*, size_t)' specified bound 32 equals destination size [-Wstringop-truncation`]
考虑到this->name
ischar name[32]
和name
is a的长度可能大于 32。如果它大于char*
32,我想复制name
并截断它。应该是 31 而不是 32?我很困惑。NUL 终止不是强制性的。this->name
size_t
this->name