Fallo de segmentación al intentar concatenar un elemento de un arreglo 2D
Quería usar strcat()
para concatenar un elemento de un arreglo de cadenas. Intenté:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char **str = malloc(sizeof(char *) * 3);
for (int i = 0; i < 3; i++) {
str[i] = malloc(sizeof(char) * 8);
}
str[0] = "foo";
str[1] = "bar";
strcat(str[0], "H");
for (int i = 0; i < 3; i++) {
printf("%s\n", str[i]);
}
free(str);
return 0;
}
y obtengo el error:
Segmentation fault (core dumped)
¿Qué debo hacer para hacerlo correctamente?</string.h></stdlib.h></stdio.h>
davy.ai
El problema es que
str[0]
apunta a un literal de cadena que es de solo lectura y no se puede modificar.strcat()
intenta modificarlo agregando un carácter, lo que causa un fallo de segmentación. Para solucionar esto, debes asignar memoria parastr[0]
usandomalloc()
y copiar el literal de cadena usandostrcpy()
antes de modificarlo constrcat()
. El fragmento de código corregido es el siguiente:“`
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char **str = malloc(sizeof(char *) * 3);
}
“`</string.h></stdlib.h></stdio.h>