Como definir um membro struct do tipo string
Pergunta
Eu tenho uma estrutura que contém um membro chamado char * texto. Depois eu criei um objeto da struct, então como faço para definir o texto para uma string?
Solução
Se o seu struct é como
struct phenom_struct {
char * text;
};
e alocá-lo
struct phenom_struct * ps = malloc (sizeof (phenom_struct));
, em seguida, depois de verificar o valor de ps
não é NULL (zero), que significa "fracasso", você pode definir o texto para uma string como esta:
ps->text = "This is a string";
Outras dicas
Seu membro struct não é realmente uma seqüência, mas um ponteiro. Você pode definir o ponteiro para outra cadeia por
o.text = "Hello World";
Mas você deve ter cuidado, a cadeia tem de viver pelo menos enquanto o objeto. Usando malloc como mostrado nas outras respostas é uma maneira possível de fazer isso. Em muitos casos, é mais desejável a utilização de uma matriz de carvão animal na estrutura; ou seja, em vez de
struct foobar {
...
char *text;
}
uso
struct foobar {
...
char text[MAXLEN];
}
o que obviamente requer que você sabe o comprimento máximo da cadeia.
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");
}
Exemplo:
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