Dividiendo una cadena dinámica larga en una matriz de cadenas en c.
Soy bastante nuevo en C y no puedo entender por qué esta función no funciona consistentemente en absoluto:
char **splitString(char *string) {
char *token = strtok(string, ","), **finalValue = NULL, **temp = NULL;
size_t wordIndex = 0;
while (token != NULL) {
temp = realloc(finalValue, sizeof(char *));
if (!temp) {
freeArray(finalValue);
finalValue = NULL;
break;
}
temp[wordIndex] = malloc((strlen(token)+1)*sizeof(char));
if (temp[wordIndex] == NULL) {
freeArray(finalValue);
finalValue = NULL;
break;
}
strcpy(temp[wordIndex], token);
printf("%s\n", temp[wordIndex]);
finalValue = temp;
printf("%s\n", finalValue[wordIndex]);
wordIndex++;
token = strtok(NULL, ",");
}
return finalValue;
}
Recibe una cadena separada por comas y se supone que las divide en diferentes cadenas, todas las cuales fueron creadas mediante malloc
/realloc
.
davy.ai
El problema con esta función es que solo reasigna memoria para un elemento a la vez, en lugar de asignar memoria para toda la cadena. La línea
temp = realloc(finalValue, sizeof(char *))
solo reasigna memoria para unchar*
, en lugar de reasignar memoria parawordIndex+1
char*
. Esto significa que cada vez que se ejecuta el bucle, se reasigna memoria para un elemento, lo que significa que se pierde la memoria anterior. Para solucionar esto, puedes cambiar la línea atemp = realloc(finalValue, sizeof(char *)*(wordIndex+1));
para que reasigne memoria para todos los elementos en el arreglofinalValue
.