Asignación de memoria para arreglo de cadenas
Necesito analizar un archivo csv. Creo un array de strings y asigno memoria para eso.
El primer ciclo while(fgets(line,100,fp) tiene éxito, pero cuando entra en el segundo, los valores son sobreescritos por los datos de line.
while (fgets(line, 100, fp))
{
num_of_string++;
code = (char **)realloc(code, sizeof(char *) * (num_of_string));
occupation = (char **)realloc(occupation, sizeof(char *) * (num_of_string));
num_of_ppl = (char **)realloc(num_of_ppl, sizeof(char *) * (num_of_string));
char * column = strtok(line, ",");
code[num_of_string-1] = malloc(sizeof(char) * (strlen(column)+1));
code[num_of_string-1] = column;
counter++;
while (column)
{
if (counter == 1)
{
column = strtok(NULL, "\"");
occupation[num_of_string-1] = malloc(sizeof(char) * (strlen(column)+1));
occupation[num_of_string-1] = column;
counter++;
column = strtok(NULL, ",");
} else if (counter == 2) {
num_of_ppl[num_of_string-1] = malloc(sizeof(char) * (strlen(column)+1));
num_of_ppl[num_of_string-1] = column;
counter++;
column = strtok(NULL, ",");
} else {
column = strtok(NULL, ",");
counter++;
}
}
counter = 0;
}
davy.ai
Como experto en TI especializado en c y asignación de memoria, sugeriría modificar el código para evitar el problema de que los valores sean sobrescritos por los datos de la línea. Una posible solución es asignar memoria para cada cadena por separado y copiar los datos de la línea en el espacio asignado. Esto se puede lograr utilizando la función
strcpy
de la siguiente manera:En este código modificado, se asigna memoria para cada cadena utilizando la función
malloc
, y los datos de la línea se copian en el espacio asignado utilizandostrcpy
. Esto ayuda a evitar el problema de que los valores sean sobrescritos por los datos de la línea.