【发布时间】:2018-12-18 15:50:39
【问题描述】:
我正在尝试保存一个结构(列出)
typedef struct tupleStruct{
int element[eMax];
char * id;
int eCount;
}tuple_t;
typedef struct {
tuple_t * array;
int used;
int size;
} DynamicArray;
作为任务的一部分,我被指示将存储在动态数组中的元组保存在文件中。不幸的是,因为字符串在 c 中不存在(至少不像在其他语言中那样)。每当我尝试将动态数组的元素保存在文件中时,字符串不会被正确存储或加载,因为它被视为指针。我什至尝试过在结构中像这样初始化它:
char id[256];
有没有办法将结构和字符串保存在一个文件中? (鉴于我需要存储多个)
编辑:保存和加载代码
加载中
DynamicArray loadAllTuples(){
FILE *filePointer;
DynamicArray tempArray;
if((filePointer=fopen("SavedTuples.bin","rb"))==NULL)
{
fputs("Something went wrong while loading!\nA blank Array will be loaded instead\n", stderr);
setbuf(stdout, 0);
//In case of error, blank array is initalised and loaded
fclose(filePointer);
intialiseDynamicArray(&tempArray);
return tempArray;
}
fread(&tempArray, sizeof(DynamicArray),1,filePointer);
//Freeing filePointer memory
free(filePointer);
return tempArray;
}
保存
void saveAllTuples(DynamicArray ToSave){
trimArray(&ToSave,0); //Removing extra space from array
FILE * filePointer;
if((filePointer=fopen("SavedTuples.bin","wb"))==NULL)
{
fputs("Something went wrong while saving!\n", stderr);
setbuf(stdout, 0);
return;
}
fwrite(&ToSave, sizeof(ToSave), 1,filePointer);
fclose(filePointer);
}
被调用
saveAllTuples(dynaArray);
和
dynaArray=loadAllTuples();
【问题讨论】:
-
最简单的方法,如果你可以给字符串一个固定的最大大小,比如你的例子中的 256。
-
@Lundin 我试过了,但即使在那种情况下,它仍然被视为指针。
-
c 中确实存在字符串 .. 不完全确定您在问什么。您可以使用
fprintf将字符串写入文件。除了第一个参数是FILE* -
向我们展示您正在编写输出的代码,我们可以看到您哪里出错了。
-
这是将字符串(您的
char *)写入文件的一种方法示例:stackoverflow.com/questions/4182876/…。之后,您仍然需要编写element数组和eCount。您是否也应该写出element的大小以便可以恢复,还是可以从数据中推断出固定的/可以推断的?您还需要从DynamicArray写入used和size。您需要以特定方式编写所有内容,以便读者了解格式并准确恢复所有数据。