在C中从二进制文件读取整数数组时中止陷阱
我有两个文件。一个用于写入二进制文件,另一个用于读取。现在,我只是尝试在基本二进制文件中写入和读取一个整数数组。看起来我的代码是成功的,直到我在打印出我想要的结果后遇到一个中止陷阱6 我已经研究过这个问题,似乎正在发生的是,我试图访问我没有权限访问的内存。我已经尝试增加阵列的大小来解决这个问题,但是,这似乎不起作用。这是我的两个文件 写作:在C中从二进制文件读取整数数组时中止陷阱,c,binaryfiles,C,Binaryfiles,我有两个文件。一个用于写入二进制文件,另一个用于读取。现在,我只是尝试在基本二进制文件中写入和读取一个整数数组。看起来我的代码是成功的,直到我在打印出我想要的结果后遇到一个中止陷阱6 我已经研究过这个问题,似乎正在发生的是,我试图访问我没有权限访问的内存。我已经尝试增加阵列的大小来解决这个问题,但是,这似乎不起作用。这是我的两个文件 写作: #include <stdio.h> #include <string.h> int main(void){ FILE *fp;
#include <stdio.h>
#include <string.h>
int main(void){
FILE *fp;
int num[4] = {4,2,3,7};
fp = fopen("tst.bin", "wb+");
fwrite(&num, sizeof(int) * 4, 4, fp);
fclose(fp);
return 0;
}
不!你想要
fwrite(&val, sizeof(int) * 4, 1, fp);
fread(val, sizeof(int) * 4, 1, fp);
您有一个包含四个整数的数组,而不是其中的四个。另外,像这样获取数组的地址也不是惯用方法。只需省略&.
fwrite(num,sizeof(int),4,fp)
就更好了,因为它与文档匹配,其中的参数是每个元素的大小,也是元素的数量。不过,这只是表面现象。C真的知道从文件中读取4个数字吗?它如何知道一个数字何时结束,下一个数字何时开始?@smack89:sizeof(int)
起作用。如果他在做一些更奇特的事情,我也会根据数组本身的大小来调整大小。
The value is:
4 2 3 7
Abort trap: 6
fwrite(&num, sizeof(int) * 4, 4, fp);
fread(num, sizeof(int) * 4, 1, fp);
fwrite(&val, sizeof(int) * 4, 1, fp);
fread(val, sizeof(int) * 4, 1, fp);