Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中从二进制文件读取整数数组时中止陷阱_C_Binaryfiles - Fatal编程技术网

在C中从二进制文件读取整数数组时中止陷阱

在C中从二进制文件读取整数数组时中止陷阱,c,binaryfiles,C,Binaryfiles,我有两个文件。一个用于写入二进制文件,另一个用于读取。现在,我只是尝试在基本二进制文件中写入和读取一个整数数组。看起来我的代码是成功的,直到我在打印出我想要的结果后遇到一个中止陷阱6 我已经研究过这个问题,似乎正在发生的是,我试图访问我没有权限访问的内存。我已经尝试增加阵列的大小来解决这个问题,但是,这似乎不起作用。这是我的两个文件 写作: #include <stdio.h> #include <string.h> int main(void){ FILE *fp;

我有两个文件。一个用于写入二进制文件,另一个用于读取。现在,我只是尝试在基本二进制文件中写入和读取一个整数数组。看起来我的代码是成功的,直到我在打印出我想要的结果后遇到一个中止陷阱6

我已经研究过这个问题,似乎正在发生的是,我试图访问我没有权限访问的内存。我已经尝试增加阵列的大小来解决这个问题,但是,这似乎不起作用。这是我的两个文件

写作:

#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);