在C语言中将二维数组写入文件

8

我曾经使用下面的代码将1D数组写入文件:

FILE *fp;
float floatValue[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F };
int i;

if((fp=fopen("test", "wb"))==NULL) {
    printf("Cannot open file.\n");
}

if(fwrite(floatValue, sizeof(float), 5, fp) != 5)
    printf("File write error.");
fclose(fp);

/* read the values */
if((fp=fopen("test", "rb"))==NULL) {
    printf("Cannot open file.\n");
}

if(fread(floatValue, sizeof(float), 5, fp) != 5) {
    if(feof(fp))
        printf("Premature end of file.");
    else
        printf("File read error.");
}
fclose(fp);

for(i=0; i<5; i++)
    printf("%f ", floatValue[i]);

我的问题是如何编写和读取二维数组?

2个回答

8
您可以使用相同的方法...只需进行以下更改。
float floatValue[3][5] = {{ 1.1F, 2.2F, 3.3F, 4.4F, 5.5F },
                          { 6.6F, 7.7F, 8.8F, 9.9F, 8.8F },
                          { 7.7F, 6.6F, 5.5F, 4.4F, 3.3F }};
int i,j;

...

if(fwrite(floatValue, sizeof(float), 3*5, fp) != 3*5)

...

if(fread(floatValue, sizeof(float), 3*5, fp) != 3*5) {

...

for(j=0; j<3; j++) {
    for(i=0; i<5; i++)
        printf("%f ", floatValue[j][i]);
    printf("\n");
}

当然,这不是保存/加载数据的最佳方法,特别是如果您希望在不同编译器/系统之间甚至只是在未来获得一些兼容性。

保存和还原主题通常被称为序列化,通过只需很小的开销,您可以获得更多的灵活性,特别是一旦数据模型变得更加复杂。


4

不要只使用单个for循环,您需要添加另一个例如:

for(i=0;i<lines;i++) {
for(j=0;j<num;j++) {
    fprintf(file,"%d ",array[i][j]);
}
fprintf(file,"\n");}

虽然这是合理的代码,但操作者正在寻找一些方法来写入/读取数组的二进制表示。 - EvilTeach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接