The strdup function is usefull for initialization.This function is an alternative for repetive calls of free(p); p = strdup(s);



#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct Person
{
    char* name;
};

char* strnt(const char* source)
{
    size_t sourcelen = strlen(source);
    char* p = malloc(sourcelen + 1);
    if (p != NULL)
    {
        strcpy(p, source);
    }
    return p;
}

size_t strrep(char** dest, const char* source)
{
    size_t sourcelen = strlen(source);
    char* p = realloc(*dest, sourcelen + 1);
    if (p != NULL)
    {
        *dest = p;
        strcpy(p, source);
    }
    else
    {
        sourcelen = 0;
    }

    return sourcelen;
}

int main()
{
    char* name = strnt("test");
    struct Person person = { 0 };
    strrep(&person.name, "new name");
    strrep(&person.name, "new name2");
    
    strrep(&name, "new name3");
    

    free(person.name);
    free(name);
}