Как изменить числовое поле структуры в бинарном файле?

Я записал в бинарный файл test.dat структуру Struct с полями name и count. name[19] = "This is an APPLLE.", count = 1. Мне нужно перезаписать поле count например на число 2.

Я думал, что для этого нужно с помощью fseek перевести курсор на 19 байт (где по идее заканчивается поле name) и заменить 1-у на 2-у. Но это не работает.

Как я могу перезаписать числовое поле структуры в бинарном файле? Спасибо заранее!

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


typedef struct
{
    char name[19];
    int count;
} Struct;

int main()
{
    Struct test;
    FILE* fp;

    fp = fopen("test.dat", "wb");
    if (fp != NULL)
    {
        strcpy(test.name, "This is an APPLLE.");
        test.count = 1;

        fwrite(&test, sizeof(Struct), 1, fp); // записываю структуру в файл
        
        fseek(fp, 19, SEEK_SET); // перевод курсора на 19 байт
        
        fwrite(2, sizeof(int), 1, fp); // попытка заменить 1 на 2. Тут появляется ошибка 
                                       // "нарушение прав доступа..."

        fclose(fp);
    }

    fp = fopen("test.dat", "rb");

    if (fp != NULL)
    {
        Struct temp;
        fread(&temp, sizeof(Struct), 1, fp);
        printf("\n%s\n", temp.name); // проверка поля name 
        printf("%d\n", temp.count); // проверка поля count 
    }

    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Вообще-то вот так:

fseek(fp, offsetof(Struct,count), SEEK_SET);
int newValue = 2;
fwrite(&newValue, sizeof(int), 1, fp);

Если вы сделаете

fseek(fp, 19, SEEK_SET);

то вряд ли получите требуемый результат (из-за выравнивания)...

→ Ссылка