Cómo establecer un miembro de estructura de tipo cadena
Pregunta
Tengo una estructura que contiene un miembro llamado char * text. Después de crear un objeto desde la estructura, ¿cómo configuro el texto en una cadena?
Solución
Si tu estructura es similar
struct phenom_struct {
char * text;
};
y lo asignas
struct phenom_struct * ps = malloc (sizeof (phenom_struct));
luego, después de comprobar que el valor de ps
no es NULL (cero), lo que significa que "falla", puedes establecer el texto en una cadena como esta:
ps->text = "This is a string";
Otros consejos
El miembro de su estructura no es realmente una cadena, sino un puntero. Puede establecer el puntero a otra cadena mediante
o.text = "Hello World";
Pero debes tener cuidado, la cadena debe vivir al menos tanto como el objeto. Usar malloc como se muestra en las otras respuestas es una forma posible de hacerlo. En muchos casos, es más conveniente usar una matriz char en la estructura; es decir, en lugar de
struct foobar {
...
char *text;
}
utilizar
struct foobar {
...
char text[MAXLEN];
}
que obviamente requiere que sepas la longitud máxima de la cadena.
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");
}
Ejemplo:
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