[ Foro de C ]
Hola, estoy leyendo un archivo en bloques de 32 bytes. La primer linea me la lee, y la puedo depurar, pero luego el programa se me cuelga. Lo debugee pero sigo sin encontrar el error. Adjunto código. Si alguien puede darme una mano genial, muchas gracias!
#include "file_manage.h"
char* file_read_line(FILE *fp){
char buffer[32];
fread(buffer, 1, sizeof(buffer), fp);
char *full_line = (char*) malloc(32);
memcpy(full_line, buffer, strlen(buffer)+1);
int n = 2;
while (strchr(full_line, '\n') == NULL){
memset(buffer, 0, sizeof(buffer));
full_line = realloc(full_line, n*32);
fread(buffer, 1, sizeof(buffer), fp);
memcpy(&full_line[(n-1)*32], buffer, sizeof(buffer));
n++;
}
fclose(fp);
return full_line;
}
char* file_clean_line(char *file_line){
int i = 0;
char *clean_line = (char *) malloc(1);
while (file_line[i] != '\n'){
clean_line = realloc(clean_line, sizeof(char)*(i+1));
clean_line[i] = file_line[i];
i++;
}
free(file_line);
return clean_line;
}
int main(int argc, char const *argv[]){
FILE *fp;
fp = fopen(argv[1], "r");
int bytes_clean_read = 0;
while (!feof(fp)){
char *read_line = file_read_line(fp);
char *clean_line = file_clean_line(read_line);
for (int i = 0; i < strlen(clean_line); i++){
printf("%c",clean_line[i]);
}
bytes_clean_read += strlen(clean_line);
printf("\n");
printf("%li\n", strlen(clean_line));
memset(read_line, 0, strlen(read_line));
memset(clean_line, 0, strlen(clean_line));
free(clean_line);
fseek(fp, bytes_clean_read+1, SEEK_SET);
}
return 0;
}
En mi opinión, lo que estás haciendo es interesante pero peligroso. Si el fichero es de texto, no uses bloques de tamaño fijo, o al menos no busques saltos de línea. Eso dejado para ficheros binarios, en los que simplemente compruebas el EOF (fin de fichero). En texto, lee byte a byte (o a una cadena suficientemente grande) y evitarás problemas...
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)