Witam
Mam prosty kodzik napisany w "C" który odczytuje duży plik tekstowy linijka po linijce i wypisuje te linijki na ekran(dla przykładu), ale gdy czyta te linijki to przy 6701 linijce się zatrzymuje mimo że plik na pewno jest dłuższy bo sprawdzałem w programie klogg. Po wyświetleniu pliku w tym programie zauważyłem ze pętla zakończa działanie na linijce która jest długa ma ok 250 znaków tylko ze te znaki są trochę dziwne prawdopodobnie złe kodowanie ale nie ważne bo linijki poprzednie które też miały takie znaki normalnie czytała funkcja fgets() ustawiona na 1024 znaki a przy tej linijce zawiesza się funkcja fgets() pokazując za każdym razem null mimo ze następna linijka już jest normalna.
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(void)
{
FILE* fp = fopen("./../file.txt", "r");
enum {
BUF_SIZE = 10000000
};
char *buffer = (char*)malloc(BUF_SIZE);
if (fp == NULL)
{
printf("Error opening file!\n");
exit(1);
}
int counter = 0;
clock_t start = clock();
while (fgets(buffer, BUF_SIZE, fp) != NULL)
{
printf("Cos: %s \n", buffer);
// printf("%s", buffer);
counter++;
}
free(buffer);
clock_t end = clock();
double time_spent = (double)(end - start) / CLOCKS_PER_SEC;
printf("Time: %f\n", time_spent);
printf("Counter: %d\n", counter);
printf("End of file\n");
fclose(fp);
}
Wie ktoś dlaczego tak się może dziać i jak zabezpieczyć program aby czytało kolejne linijki a nie za się zawieszało i zwracało cały czas null?
Myślałem ze jest to problem z długością wiersza ale użyłem malloc() jak widać w kodzie ale nadal to samo.