Comment définir un membre struct de type string
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?
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