我写了一些简单地将 double 数组写入二进制文件的代码
#include<stdio.h>
void main(void) {
// Open binary files
FILE *pFileResultsBin1;
FILE *pFileResultsBin2;
pFileResultsBin1 = fopen("results1.bin","wb+");
pFileResultsBin2 = fopen("results2.bin","wb+");
// Create array
double arr[3];
arr[0] = 1.0;
arr[1] = 2.0;
arr[2] = 3.0;
// Write array to binary files 10 times
int i;
// Method using sizeof(arr)
for(i=0;i<10;i++){
fwrite(&arr, sizeof(arr),1,pFileResultsBin1)
}
// Method using sizeof(arr[0])
for(i=0;i<10;i++){
fwrite(&arr, sizeof(arr[0]),3,pFileResultsBin2)
}
// Close files
fclose(pFileResultsBin1);
fclose(pFileResultsBin2);
}
在Internet上阅读用于编写数组的示例时,通常使用
sizeof(arr[0])
的方法,但是使用sizeof(arr)
有任何不利之处吗?我尝试了两种方法,并且都使用MATLAB正确读取了两种方法:FID1 = fopen(result1.bin);
FID2 = fopen(result1.bin);
A = fread(FID1,[3 inf],'*double','ieee-le');
B = fread(FID2,[3 inf],'*double','ieee-le');
亲切的问候,
脑电图
PS。我没有尝试编译此特定示例,因为我在没有编译器的计算机上。
最佳答案
看一下手册页http://www.freebsd.org/cgi/man.cgi?query=fwrite&apropos=0&sektion=0&manpath=FreeBSD+10.0-RELEASE&arch=default&format=html。
fwrite的返回值是写入的对象数。
因此,如果写入成功,则代码中的第一个fwrite将返回1,第二个fwrite将返回3。
除此之外,这些电话是等效的。