将二维数组写入C中的文件

Posted

技术标签:

【中文标题】将二维数组写入C中的文件【英文标题】:write 2d array to a file in C 【发布时间】:2011-06-06 00:45:05 【问题描述】:

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

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

我的问题是我是否想读写二维数组??

【问题讨论】:

【参考方案1】:

您将添加另一个循环而不是单个 for 循环,例如:

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

fprintf(file,"\n");

【讨论】:

虽然这是合理的代码,但 op 正在寻找一些东西来写入/读取数组的二进制表示。【参考方案2】:

您可以使用相同的方法...只需进行以下更改

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

当然请注意,这不是保存/加载数据的最佳方式,特别是如果您希望在不同的编译器/系统之间或什至只是与未来有一些兼容性时。 保存和恢复的主题通常被命名为serialization,只需非常小的开销,您就可以获得更大的灵活性,尤其是在数据模型变得更复杂时。

【讨论】:

以上是关于将二维数组写入C中的文件的主要内容,如果未能解决你的问题,请参考以下文章

C - 将结构写入二维数组会导致分段错误

在Excel C#范围内写入二维对象数组

二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

如何将二维数组写入文本文件?

怎么把一个二维数组写入一行数据库中?

如何将一个二维数组中的内容复制到另一个二维数组