我正在尝试将filedata加载到2d数组中,但是在调用fread时我收到了EXC_BAD_ACCESS错误。
这就是我尝试阅读文件的方式:
char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS
答案 0 :(得分:1)
在C中,二维数组(nxm)表示为n个指针的数组,指向n个大小为m的数组。
fread将读入给定指针指向的内存区域。
在你的情况下,fread会将数据写入应该存储n个指针的位置。你不能简单地在C中的二维数组上使用fread()或任何类似的方法。
相反,首先读入大小为m * n的1维数组,然后将指向“行首”的指针复制到指针数组中:
char tmp[21*23];
FILE* file = fopen("1.txt", "r");
fread(tmp, 1, sizeof(tmp), file);
char* data[21];
int i;
for(i = 0; i < sizeof(data)/sizeof(char*); i++) {
data[i] = &tmp[23*i];
}
更新:示例代码包含错误(我使用了sizeof(数据),在64位系统上,它将返回所需值的8倍,从而导致另一个EXC_BAD_ACCESS;))