C fileIO не так, как ожидалось - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь сделать простое написание и чтение двоичного файла в c, и я сталкиваюсь с трудностями.Вот мой код настолько урезанный, насколько я мог:

typedef struct car_struct{
    char* make;
    char* model;
    short year;
    long price;
    int uniqueID;
}Car;

int main(){
    FILE *fp = fopen("filename", "wb+");

    Car car = {"s","s",1,1,1};
    fwrite(&car, sizeof(Car), 1, fp);

    rewind(fp);
    Car* c;

    fread(c,sizeof(Car),1,fp);


    printf("%d \n",c->price);
}

Я думал, что код напишет структуру в файл, затем прочитает его и распечатает одно из его полей.Фактическим результатом, однако, является программа, завершающая работу, и ничего не распечатывается.Кажется, что где-то закралось неопределенное поведение, но я не уверен, где.В чем проблема с кодом?

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Проблема со строкой Car* c; Вы создали указатель, который указывает на какой-то случайный адрес.Вы можете определить размер памяти, которую вы хотите c держать, используя malloc(sizeof(Car))

0 голосов
/ 26 октября 2018

Вы просто записываете значения указателей для строк, а не сами строки.Либо сделайте make и model чем-то вроде char[32], чтобы они фактически находились в структуре, либо напишите свои собственные процедуры чтения / записи.

Также не забывайте проверять результаты всех операций ввода-вывода- это может дать представление о других проблемах.

...