Edit: Update en #7 xD
Holaquetal,
Estoy un poco bastante frustrado porque llevo no sé ni cuanto dándome cabezazos contra la puta mierda de código este y no termina de funcionar. Lo que necesito hacer es lo siguiente:
Leo un fichero cuyos datos vienen en 2 columnas por linea, tal que así:
CAMPO1 CAMPO2
CAMPO1 CAMPO2
CAMPO1 CAMPO2
Entre cada columna puede haber 1 o varias lineas en blanco o tabuladores. No sé cuantas lineas tendré que leer, pero siempre serán 2 columnas. En la primera lectura lo leo hasta el final y cuento el nº de lineas. Luego multiplico ese número x2 y tengo los elementos para los que debo reservar memoria en el array. Cada linea no tendrá una longitud mayor de 80, por lo que cada elemento no será mayor de 40. Reservo memoria para un array de numero_de_lineas2 filas y cada fila char40 columnas.
Rebobino el "puntero" del fichero al inicio y empiezo la lectura para cortar cada campo y guardarlo en el array. La cosa va de puta madre para el primer CAMPO1, lo que sería el array[0][X]. El tema es que los siguientes campos, pese a estar aumentando correctamente la fila y poniendo la columna a 0, no me los guarda. Suda de todo. Tampoco casca el programa, pero al debuggear se ve que pasa por ahí como guardando cada campo pero realmente en el array no se guardan, sólo tiene 1 fila. La verdad es que no sé qué mierda está pasando, porque para colmo tengo un programa que hice hace unos meses prácticamente igual pero en vez de desde fichero pillaba una frase por teclado y guardaba cada palabra en una fila de un array. Ese funciona y el de ahora no, no fucking sense.
Después de esta chapa, si alguien ha llegado a leer hasta aquí, le pongo los trozos de código que considero relevantes para el asunto, a ver si ve algo raro >.<
FILE* f_entrada;
char **campos;
int fila=0;
int col=0;
char char_actual;
...
while (fgets(linea, 80, f_entrada)) {
if (strlen(linea) > 1)
f_num_lineas++;
}
f_num_lineas *=2;
campos = (char**)malloc(f_num_lineas * sizeof *campos);
for (int i=0; i<f_num_lineas; i++)
campos[i] = (char*)malloc(40*sizeof(char));
...
char_actual=fgetc(f_entrada);
do {
if (isspace(char_actual)) { // Si encuentro un espacio cambio de elemento en el array
campos[fila][col] = 0;
fila++;
col=0;
do { // Pasamos de largo todos los espacios o lineas en blanco que pueda haber hasta el próx. char
char_actual=fgetc(f_entrada);
} while (isspace(char_actual));
} else {
campos[fila][col] = char_actual; // Guardo el caracter en el array
col++;
}
char_actual=fgetc(f_entrada);
} while (char_actual != EOF);
El resultado en el array donde deberían estar las palabras justo después del while es el siguiente:
¿Alguna idea? xD Thank you very much.