Comment correctement attribuer une nouvelle valeur de chaîne?

J'essaie de comprendre comment résoudre ce problème trivial en C, dans la plus propre/manière la plus sûre. Voici mon exemple:

#include <stdio.h>

int main(int argc, char *argv[])
{
    typedef struct
    {
        char name[20];
        char surname[20];
        int unsigned age;
    } person;

    //Here i can pass strings as values...how does it works?
    person p = {"John", "Doe",30};

    printf("Name: %s; Age: %d\n",p.name,p.age);
    //This works as expected...
    p.age = 25;
    //...but the same approach doesn't work with a string
    p.name = "Jane";

    printf("Name: %s; Age: %d\n",p.name,p.age);

    return 1;
}

Le compilateur de l'erreur est:

principal.c: In function ‘main’: main.c:18:
error: incompatible types de
l'attribution to type ‘char[20]’ from type
‘char *’

Je comprends que C (pas C++) n'a pas de type Chaîne de caractères et utilise à la place des tableaux de caractères, donc, une autre façon de le faire était de modifier l'exemple struct pour contenir des pointeurs de caractères:

#include <stdio.h>

int main(int argc, char *argv[])
{
    typedef struct
    {
        char *name;
        char *surname;
        int unsigned age;
    } person;

    person p = {"John", "Doe",30};

    printf("Name: %s; Age: %d\n",p.name,p.age);

    p.age = 25;

    p.name = "Jane";

    printf("Name: %s; Age: %d\n",p.name,p.age);

    return 1;
}

Cela fonctionne comme prévu, mais je me demande si il y a une meilleure façon de le faire. Merci.

  • Si nous déclarons struct dans main(), personne ne peut être l'accès à l'intérieur. Essayez de déplacer hors de la principale de l'utiliser comme global