Skip to content

Instantly share code, notes, and snippets.

@sebbekarlsson
Created May 25, 2020 18:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sebbekarlsson/876d689170f69ff5eed8f9c5f708e9a1 to your computer and use it in GitHub Desktop.
Save sebbekarlsson/876d689170f69ff5eed8f9c5f708e9a1 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct FRUIT_STRUCT
{
char* name;
} fruit_T;
fruit_T* init_fruit(const char* name)
{
fruit_T* fruit = calloc(1, sizeof(struct FRUIT_STRUCT));
fruit->name = calloc(strlen(name) + 1, sizeof(char));
strcpy(fruit->name, name);
return fruit;
}
typedef struct FRUIT_LIST_STRUCT
{
fruit_T** fruits;
size_t size;
} fruit_list_T;
fruit_list_T* init_fruit_list()
{
fruit_list_T* fruit_list = calloc(1, sizeof(struct FRUIT_LIST_STRUCT));
fruit_list->fruits = (void*)0;
fruit_list->size = 0;
return fruit_list;
}
void fruit_list_add_fruit(fruit_list_T* list, fruit_T* fruit)
{
list->size += 1;
if (list->fruits == (void*)0)
list->fruits = calloc(1, sizeof(struct FRUIT_STRUCT*));
else
list->fruits = realloc(list->fruits, list->size * sizeof(struct FRUIT_STRUCT*));
list->fruits[list->size-1] = fruit;
}
int main(int argc, char* argv[])
{
fruit_list_T* list = init_fruit_list();
fruit_T* apple = init_fruit("apple");
fruit_T* pear = init_fruit("pear");
fruit_T* banana = init_fruit("banana");
fruit_list_add_fruit(list, apple);
fruit_list_add_fruit(list, pear);
fruit_list_add_fruit(list, banana);
// print all fruits in list
for (int i = 0; i < list->size; i++)
printf("%s\n", list->fruits[i]->name);
const char filename[] = "list.dat";
// Write "list" to file.
FILE *fp = fopen(filename, "wb");
if (fwrite(&list ,sizeof(list), 1, fp) == 1)
printf("Wrote to file.\n");
fruit_list_T* loaded_list = init_fruit_list();
// Load "list" from file.
FILE *fp2 = fopen(filename, "rb");
if (fread(&loaded_list, sizeof(loaded_list), 1, fp2) == 1)
printf("Loaded from file.\n");
// print all fruits in loaded list
for (int i = 0; i < loaded_list->size; i++)
printf("%s\n", loaded_list->fruits[i]->name);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment