重新阅读C中的结构

Piz*_*owa 3 c structure

我试图从文件中读取结构.一切都是正确的,直到我关闭我的应用程序并再次打开它尝试读取数据.

  1. 写结构到文件(正确)
  2. 从文件中读取结构(正确)
  3. 关闭应用程序
  4. 从文件中读取结构(不正确)
  5. 项目清单

处理终止,状态为-1073741819(0分钟,6秒(s))

我的代码:logika.c

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "logika.h"
int write_struc(char *PF, char *DF, char *TF, char *TL)
{
    struct MYSTR myStruct ={PF, DF, TF, TL};
    FILE* fb;
    if ((fb=fopen(PLIK_DAT, "a"))!=NULL)
    {
        fwrite(&myStruct, sizeof(struct MYSTR), 1, fb);
        fclose(fb);
        return 1;
    }
    else
    {
        return 0;
    }
}

void read_struc()
{
    FILE* fb;
    struct MYSTR myStruct;
    fb = fopen(PLIK_DAT, "r");
    while(1) {
        fread(&myStruct,sizeof(struct MYSTR),1,fb);
        if(feof(fb)!=0)
            break;
        printf("%s",myStruct.PF);
        printf("%10s" ,myStruct.DF);
        printf("%10s" ,myStruct.TF);
        printf("%10s\n", myStruct.TL);
    }
    fclose(fb);
}
Run Code Online (Sandbox Code Playgroud)

logic.h

#ifndef LOGIKA_H_INCLUDED
#define LOGIKA_H_INCLUDED
#define PLIK_DAT "baza.dat"
int write_struc(char *PF, char *DF, char *TF, char *TL);
struct MYSTR{
    char *PF;
    char *DF;
    char *TF;
    char *TL;
};
#endif // LOGIKA_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)

我已经尝试过二进制写入/读取并且没有帮助.

ano*_*ave 7

您的结构包含4个地址.这些地址在您的程序之外毫无意义.如果你期望字符串数据(结构中包含的地址是什么)被写出来,你必须自己做,并设计一个文件格式,允许你重建输入数据.

在你的程序的一次执行中,你得到"幸运",因为这些地址的数据没有改变,所以它看起来像是有效的.但它没有任何用处.