gpt4 book ai didi

c - 在 cppcheck 中越界访问缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 05:48:13 24 4
gpt4 key购买 nike

代码可以编译,结果很好。但是cppcheck会报错。

#define BUF_SIZE     1024
#define MAX_LENG 80

static unsigned char path[MAX_LENG];
unsigned char file_buf[BUF_SIZE*2];

memset(file_buf, 0, sizeof(file_buf));
strcpy(file_buf, "KID ");
strncat(file_buf, &path[strlen(path)-12], 10); //error this line

试了几次,还是找不到原因。谁能给我一些提示?

谢谢大家的回答。

但我还有更多问题:如果这是一个 fatal error ,为什么编译器通过了并且结果是我想要的?什么情况下会出问题?

有什么替代方法可以实现吗?

如果我把它改成

strncat(file_buf, &path[strlen(path)-12], 5);

cppcheack 错误将消失。为什么?

最佳答案

这里的缓冲区:

static unsigned char path[MAX_LENG];

是静态的,因此零初始化。第一次执行此代码时,第一个字符为 0。因此 strlen(path) 将返回 (size_t)0。从中减去 12,由于模运算,您会得到一个非常大的无符号数,这个数肯定大于 1024

关于c - 在 cppcheck 中越界访问缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53756698/

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