Copie una cadena a un miembro de la estructura *struct.
He revisado temas de índole similar, pero no encontré una solución para mi problema. Tengo una estructura así:
typedef struct {
int number;
char *string;
} mystruct;
Luego defino un puntero a la estructura:
mystruct *data;
Asigno memoria:
data = malloc(sizeof(mystruct));
Asigno un número, digamos 5:
(*data).number = 5;
Hasta aquí todo bien, funciona (comprobé que puedo recuperar el número 5 desde otra parte de la estructura), pero:
strcpy((*data).string = "¡Hola!");
// Esta línea arroja un fallo de segmentación.
No entiendo por qué. ¿Alguien puede explicarme qué estoy haciendo mal?
davy.ai
El problema con el código es que el puntero a
char
(variablestring
) no tiene memoria asignada antes de que se realice la operaciónstrcpy
.En el código dado, el
char *string
dentro de la estructuramystruct
es solo un puntero a una ubicación de memoria, a la cual no se le ha asignado memoria. Entonces, cuando se realiza la operaciónstrcpy
, intenta copiar la cadena literal “Hello!” a una ubicación de memoria que no ha sido asignada, lo que resulta en un fallo de segmentación.Para solucionar este problema, debes asignar memoria para la variable
string
antes de realizar la operaciónstrcpy
. Puedes asignar memoria usando la funciónmalloc
, de esta manera:Aquí,
malloc
se usa para asignar memoria para la cadena, ystrlen
se usa para obtener la longitud de la cadena que se va a copiar. Se agrega+1
ya que necesitamos asignar memoria para el carácter terminador nulo al final de la cadena. Finalmente, la funciónstrcpy
se usa para copiar la cadena a la ubicación de memoria asignada.