C:与字符串一起保存结构的动态数组

标签 c arrays dynamic struct

我正在尝试保存一个结构(已列出)

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

最佳答案

与其一次性编写整个结构,不如利用您对它们包含的内容的了解来编写它的各个部分。因此,例如,如果 eCountelement 中值的数量,您可以这样写

fwrite(&ToSave.eCount,sizeof(int), 1, filepointer);
fwrite(ToSave.element,sizeof(int), ToSave.eCount, filepointer);

然后存储字符串组件

size_t length=strlen(ToSave.id);
fwrite(&length,sizeof(int), 1, filepointer);
fwrite(ToSave.id,sizeof(char), length, filepointer);

注意:sizeof(char) 通常总是 1,因此您可以假设并输入 1 而不是 sizeof(char) 但我发现它使代码看起来让它留在里面更均匀。

然后你在阅读的时候把这个过程反过来

fwrite(&ToLoad.eCount,sizeof(int), 1, filepointer);
fwrite(ToLoad.element,sizeof(int), ToLoad.eCount, filepointer);
// etc...

关于C:与字符串一起保存结构的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53836652/

相关文章:

c - gcc -O2 标志在修改 const int 时影响

c++ - 在映射最小值和最大值时从无符号转换为有符号的最佳方法?

C#.Net AsSpan().Fill() byte[] vs Int32[] vs float[] 速度差异取决于数组长度?

c++ - 需要帮助按字母顺序排列数组

javascript - Angular新手,无响应动态表

c++ - 循环中的动态内存分配 - C++

c - Apache 服务器中的日常任务

c - 独特的 KEY 生成算法

javascript - 在javascript中将数组添加到数组?

javascript - 使用谷歌图动态调整条形图的大小