0

我正在尝试将文件数据加载到二维数组中,但是在调用 fread 时出现 EXC_BAD_ACCESS 错误。

这就是我尝试读取文件的方式:

char data[21][23];
FILE* file = fopen("1.txt", "r");
fread(data, 1, sizeof(data), file); // EXC_BAD_ACCESS
4

1 回答 1

1

在 C 中,二维数组 (nxm) 表示为一个包含 n 个指针的数组,这些指针指向 n 个大小为 m 的数组。

fread 将读入给定指针指向的内存区域。

在您的情况下, fread 会将数据写入应该存储 n 指针的位置。您不能简单地对 C 中的二维数组使用 fread() 或任何类似方法。

相反,首先读入一个大小为 m*n 的一维数组,然后将指向“行首”的指针复制到一个指针数组中:

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(data),它在 64 位系统上将返回 8 倍于所需值,导致另一个 EXC_BAD_ACCESS ;))

于 2012-05-03T15:33:24.700 回答