问题描述
我有要保存到文件中的数据。第二次运行程序后(在写入我想要的数据后),保存的数据被读取为随机值(任意数字)。我不确定这是否是因为我正在使用动态分配的数组。如果有人能告诉我为什么不保存和打印正确的数据?
这是代码示例:
Bundle.init(identifier:)
解决方法
我的建议是重写您的代码以使其更清晰。这个想法是让函数具有非常具体的任务,这样代码就不会到处混合。波纹管是一个工作示例:
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 4
#define HEIGHT 4
typedef struct
{
int data;
}LandData;
int fileExists(char *filename)
{
FILE *file = fopen(filename,"rb");
if (file == NULL)
return 0;
fclose(file);
return 1;
}
void fillArray(LandData *array)
{
printf("Give me the data\n");
for (int column = 0; column < WIDTH; column++)
{
for (int row = 0; row < HEIGHT; row++)
{
printf("[%d,%d]: ",column,row);
scanf("%d",&(array[row + column * HEIGHT].data));
}
}
}
void serializeArray(LandData *array,char *filename)
{
FILE *file;
file = fopen(filename,"wb");
if (file == NULL)
{
printf("Error while opening file!\n");
exit(1);
}
fwrite(array,sizeof(LandData),WIDTH * HEIGHT,file);
fclose(file);
}
void printSerializedArray(char *filename)
{
LandData array[WIDTH * HEIGHT];
FILE *file = fopen(filename,"rb");
if (file == NULL)
{
printf("Error while opening file!\n");
exit(1);
}
fread(array,file);
for (int column = 0; column < WIDTH; column++)
{
for (int row = 0; row < HEIGHT; row++)
{
printf("%d ",array[row + column * HEIGHT].data);
}
printf("\n");
}
fclose(file);
}
int main(int argc,char *argv[])
{
if (fileExists("file.bin"))
{
printSerializedArray("file.bin");
}else
{
LandData array[WIDTH * HEIGHT];
fillArray(array);
serializeArray(array,"file.bin");
}
return 0;
}
我没有使用动态分配的数组(因为它不是必需的),但是如果您想使用动态数组,那么只需将 LandData array[WIDTH * HEIGHT];
替换为 LandData *array = malloc(sizeof(LandData) * WIDTH * HEIGHT);
。