#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <inttypes.h>
typedef struct {
char *name;
char *surname;
} Metainfo;
// Создать структуру, используя двойной pointer reference
bool mi_new(Metainfo **inst, char *name, char *surname) {
*inst = (Metainfo *) malloc(sizeof(Metainfo));
if (*inst == NULL) return false;
(*inst)->name = strdup(name);
(*inst)->surname = strdup(surname);
return true;
}
// Освободить и обнулить pointer reference
void mi_free(Metainfo **inst) {
free((*inst)->name);
free((*inst)->surname);
free(*inst);
*inst = NULL;
}
// Работа с структурой
void mi_set_name(Metainfo *mt, char *name) {
free(mt->name);
mt->name = strdup(name);
}
// Так-же работа с структурой
void mi_print(Metainfo *mt) {
printf("%s %s\n", mt->name, mt->surname);
}
// c.main
int main()
{
Metainfo *meta;
if (mi_new(&meta, "Eugene", "X")) {
printf("0x%" PRIXPTR "\n", (uintptr_t) meta);
mi_print(meta);
mi_set_name(meta, "NewName");
mi_print(meta);
mi_free(&meta);
printf("0x%" PRIXPTR "\n", (uintptr_t) meta);
return EXIT_SUCCESS;
} else {
fprintf(stderr, "Memory allocation failed");
return EXIT_FAILURE;
}
}