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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top