gpt4 book ai didi

cppcheck : Buffer is accessed out of bounds

转载 作者:行者123 更新时间:2023-12-04 15:35:24 28 4
gpt4 key购买 nike

我有下面的代码。运行cppcheck工具后报错Buffer被越界访问? snprintf 在线报错。

#include <stdio.h>

int main(int argc, char * argv[])
{
if (argc > 1) {
char testref[8] = "";
snprintf(testref, sizeof(testref), "Ref:%s", argv[1]);
printf("===>testref=%s\n", testref);
}
}

命令行交互下方:

amin@ubuntu:$ gcc test.c -o test
amin@ubuntu:$
amin@ubuntu:$ ./test hello_world
===>testref=Ref:hel
amin@ubuntu:$ cppcheck test.c
Checking test.c...
[test.c:7]: (error) Buffer is accessed out of bounds.
amin@ubuntu:$

cppcheck 报错是否正确?

最佳答案

我觉得,一般来说,cppcheck报这个错是正确的。 snprintf 函数的行为取决于实现,在某些实现中,如果字符串对于缓冲区来说太大,则不能保证写入空字符。在这种情况下,对 printf() 的连续调用将超出缓冲区的边界。

我至少可以找到 one example snprintf 实现会导致您的代码出现越界错误。并根据this comment c99 之前的 True64/DigitalUnix 也是如此。

看看 cppcheck 是否也为以下代码报错(应该不会报错)会很有趣:

#include <stdio.h>

int main(int argc, char * argv[])
{
if (argc > 1) {
char testref[8] = "";
int ret = snprintf(testref, sizeof(testref), "Ref:%s", argv[1]);
if (ret >= 0) {
printf("===>testref=%s\n", testref);
}
}
}

另请注意,Cppcheck 版本 1.82 不会报告您的代码的错误。我不确定为什么 1.72 版会报错而 1.82 版不会。

关于cppcheck : Buffer is accessed out of bounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59939803/

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