• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ANSI C przedwczesne wykrywanie końca pliku

Aruba Cloud - Virtual Private Server VPS
0 głosów
278 wizyt
pytanie zadane 1 czerwca 2017 w C i C++ przez Żyrosławw Bywalec (2,300 p.)

Cześć!

Mam taki problem, pisze sobie kompresje i dekompresje plików w C, a właściwie napisałem na Linuksie.

Jednak po kompilacji na Windows program nie działa poprawnie, a mianowicie podczas dekompresji wykrywa przedwcześnie koniec pliku (EOF), więc na przykład plik po kompresji waży kilkadziesiąt kb, a po dekompresji kilkadziesiąt bajtów.

Pętla wygląda tak:



    while(fscanf(inputFile, "%c", &buffer)!=EOF)
    {
        while(bufferIter<8)
        {
            unsigned char mask = 128;
            mask = mask>>bufferIter;
            bufferIter++;

            if(buffer&mask) tmp = tmp->right;
            else tmp = tmp->left;

            if(tmp->c>0)
            {
                fprintf(outputFile, "%c", tmp->c);
                tmp = root;
            }
        }
        bufferIter = 0;
    }

To co w środku while to dekompresja, więc nie powinno mieć żadnego wpływu na działanie pętli.

O dziwo na linuksie działa bezbłędnie niezależnie od pliku :/

2 odpowiedzi

+1 głos
odpowiedź 1 czerwca 2017 przez tangarr Mędrzec (155,140 p.)
wybrane 1 czerwca 2017 przez Żyrosławw
 
Najlepsza
Prawdopodobnie otwierasz plik w trybie tekstowym.
Edit:
fscanf zwraca ilość wypełnionych zmiennych, użyj fgetc.
komentarz 1 czerwca 2017 przez Żyrosławw Bywalec (2,300 p.)
Wielkie dzięki!

To rozwiązało problem, zapisywałem w trybie binarnym, a odczytywałem w tekstowym, moje niedopatrzenie!
0 głosów
odpowiedź 1 czerwca 2017 przez Patrycjerz Mędrzec (192,320 p.)
Nie znam powodu problemu, ale polecam sprawdzić, przy którym znaku program wychodzi z pętli. Strzelam, że ma to związek z różną reprezentacją znaku nowej linii w systemach Windows i Linux, ale mogę się mylić.

Podobne pytania

0 głosów
0 odpowiedzi 221 wizyt
pytanie zadane 16 marca 2024 w C i C++ przez Wojo772233 Początkujący (480 p.)
0 głosów
1 odpowiedź 571 wizyt
+1 głos
2 odpowiedzi 516 wizyt
pytanie zadane 27 listopada 2016 w Java przez Kornelia Kobiela Nałogowiec (33,340 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...