我写了一些简单地将 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。

除此之外,这些电话是等效的。

08-06 00:30
查看更多