Created
May 25, 2020 18:19
-
-
Save sebbekarlsson/876d689170f69ff5eed8f9c5f708e9a1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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