我曾经使用下面的代码将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]);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我想写和读取2D数组?
您可以使用相同的方法...只需进行以下更改
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;
Run Code Online (Sandbox Code Playgroud)
...
if(fwrite(floatValue, sizeof(float), 3*5, fp) != 3*5)
Run Code Online (Sandbox Code Playgroud)
...
if(fread(floatValue, sizeof(float), 3*5, fp) != 3*5) {
Run Code Online (Sandbox Code Playgroud)
...
for(j=0; j<3; j++) {
for(i=0; i<5; i++)
printf("%f ", floatValue[j][i]);
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
当然,请注意,这不是保存/加载数据的最佳方法,尤其是如果您希望在不同编译器/系统之间或甚至未来之间具有一些兼容性.保存和恢复的主题通常是命名的serialization,只需很小的开销就可以获得更大的灵活性,尤其是在数据模型变得更加复杂之后.