Question

J'ai une structure qui contient un membre appelé char * text. Après avoir créé un objet à partir de la structure, comment puis-je définir du texte dans une chaîne?

Était-ce utile?

La solution

Si votre structure ressemble à

 struct phenom_struct {
    char * text;
 };

et vous l'allouez

 struct phenom_struct * ps = malloc (sizeof (phenom_struct));

puis après vérification de la valeur de ps , la valeur n'est pas NULL (zéro), ce qui signifie "échec", vous pouvez définir le texte dans une chaîne telle que:

 ps->text = "This is a string";

Autres conseils

Votre membre struct n'est pas vraiment une chaîne, mais un pointeur. Vous pouvez définir le pointeur sur une autre chaîne en

o.text = "Hello World";

Mais vous devez faire attention, la chaîne doit vivre au moins aussi longtemps que l'objet. Utiliser malloc comme indiqué dans les autres réponses est un moyen possible de le faire. Dans de nombreux cas, il est plus souhaitable d’utiliser un tableau de caractères dans la structure; c'est-à-dire au lieu de

struct foobar {
    ...
    char *text;
}

utiliser

struct foobar {
    ...
    char text[MAXLEN];
}

qui nécessite évidemment de connaître la longueur maximale de la chaîne.

typedef struct myStruct
{
    char *text;
}*MyStruct;

int main()
{
    int len = 50;
    MyStruct s = (MyStruct)malloc(sizeof MyStruct);
    s->text = (char*)malloc(len * sizeof char);
    strcpy(s->text, "a string whose length is less than len");
}

Exemple:

struct Foo {
    char* text;
};

Foo f;
f.text = "something";

// or
f.text = strdup("something"); // create a copy
// use the f.text ...
free(f.text); // free the copy
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top