c - 我遇到了“缓冲区溢出数组索引超出范围”错误
问题描述
我确实了解该错误,但不知道对此的正确解决方案是什么。它说
大小为 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
}
是否有任何适当的解决方案。
解决方案
编译器的错误信息可能是因为你复制了最多511个字节(加一个null),然后再拼接另一个最多511个字节(加一个null),一共1022个字节(加一个null)。
但是,编译器看到目标只有 512 个字节并发出警告。
解决方案在评论和其他解决方案中给出,在此不再赘述。
推荐阅读
- javascript - Backbone 遗留应用程序中的“这个”/范围问题,_.bind 没有解决
- html - 即使我做到了,CSS也没有将项目向右对齐
- vuetify.js - 如何在 vuetify v-calendar 中使用“event-more-text”道具
- javascript - 无法在数据表中显示图像 (Javascript)
- sql - 从具有特定条件的 SQL 中创建的视图中选择
- reactjs - 在 SPA 中对访客/匿名用户进行身份验证
- redcap - REDCap 自动填充早期记录中的字段
- javascript - 为什么卡不会扩展?
- python - 如何在 numpy 的 3d 数组中找到最小值和最大值,并对结果进行分组?
- java - Gradle 是否支持在单个项目中构建多个 java 模块?