Write and read structs to/from files in C

note, Jun 22, 2024, on Mitja Felicijan's blog

First let's define a shared header file for the struct definition.

// struct.h
typedef struct {
    char name[50];
    int health;
    float damage;
} Character;

Now lets write it to a character.dat file.

// write.c
#include <stdio.h>
#include <string.h>

#include "struct.h"

int main(void) {
    printf("Write struct\n");

    Character ch;

    strcpy(ch.name, "John Doe");
    ch.health = 30;
    ch.damage = 5.9;

    FILE* file = fopen("character.dat", "wb");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    fwrite(&ch, sizeof(Character), 1, file);
    fclose(file);

    return 0;
}

If we check the contents of the character.dat file it should look like this.

$ xxd character.dat
00000000: 4a6f 686e 2044 6f65 0000 0000 0000 0000  John Doe........
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 1e00 0000 cdcc bc40            ...........@

Reading and serializing back to a struct.

// read.c
#include <stdio.h>

#include "struct.h"

int main(void) {
    printf("Read struct\n");

    Character ch;

    FILE* file = fopen("character.dat", "rb");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    fread(&ch, sizeof(Character), 1, file);
    fclose(file);

    printf("Name: %s\n", ch.name);
    printf("Health: %d\n", ch.health);
    printf("Damage: %.1f\n", ch.damage);

    return 0;
}

Other notes

DateTitle
Calling assembly functions from Cc
Dungeon Crawl Stone Soup - New player guidedcss
Simple presentations with Markdown
Write and read structs to/from files in Cc
Take a screenshot in Plan9plan9
Minimal desktop setup with cwm and conky
Edsger W. Dijkstra Manuscripts ebook
Sending signals to C programsc
Push to multiple origins at once in Git
Extend Lua with custom C functions using Clangc
Make DCSS playable on 4k displaysdcss
Personal sane Vim defaultsvim
Download list of YouTube files
Cronjobs on Github with Github Actions
Change Alt key to Win key under Xfce4