首页 > 解决方案 > 我遇到了“缓冲区溢出数组索引超出范围”错误

问题描述

我确实了解该错误,但不知道对此的正确解决方案是什么。它说

大小为 512 的数组“文件名”可以使用索引值 MIN..1022

是因为strncat紧随其后strncpy吗?

我试过做strlen,但这引入了一些其他错误。

#define MAX_SIZE 512
void some_function(const char *path)        /*path is also char  
                                             array of size 512*/  
{

    char filename[MAX_SIZE]="";
    char *attr = "/funct";

    strncpy(filename, path, sizeof(filename));
    strncat(filename, attr, sizeof(filename));  //error line

}

是否有任何适当的解决方案。

标签: cc-stringsstrcpystrcatstrncpy

解决方案


编译器的错误信息可能是因为你复制了最多511个字节(加一个null),然后再拼接另一个最多511个字节(加一个null),一共1022个字节(加一个null)。

但是,编译器看到目标只有 512 个字节并发出警告。

解决方案在评论和其他解决方案中给出,在此不再赘述。


推荐阅读