2016-05-31 14 views
2

Die Fread-Funktion, die ich verwendete, scheint Inhalte in einem Puffer nicht zu speichern. Immer wenn ich versuche, den Puffer zu drucken, bekomme ich nichts.Fread-Funktion, die nicht in Puffer speichert

Wie löst man dieses Problem?

#include<stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
    FILE* ptr1 = fopen("try.txt","r"); 
    int count = 0; 
    while(fgetc(ptr1) != EOF) 
    { 
     count++; 
    } 
    char* buffer = malloc(sizeof(char)*count); 
    fread(buffer,sizeof(char),count, ptr1); 
    printf("%s",buffer); 
    fclose(ptr1); 
    free(buffer); 
} 
+6

1. Sie müssen den Rückgabewert von 'fopen' überprüfen, um zu bestätigen, dass es erfolgreich war. 2. Nach der 'fgetc'-Schleife befindet sich der Stream am Ende der Datei. Sie müssen [zurückspulen] (http://linux.die.net/man/3/rewind) es zurück zum Anfang der Datei. 3. Sie müssen 'NUL' die Daten beenden, die gelesen wurden, da der' fread' wahrscheinlich keine Zeichenfolge erzeugt. – kaylum

+1

Zusammenfassung: Lesen Sie die Dokumentation zu den Funktionen, die Sie anrufen, und bewundern Sie die Rückgabecodes, die sie liefern, damit Sie nicht in die Grube des Verstoßes fallen [Henry Spencers 6. Gebot für C-Programmierer] (https://www.seebs.net/ c/10com.html). – WhozCraig

+0

Ein weiteres schönes Beispiel, warum die Fehlerprüfung sehr wichtig ist. Siehe: Wenn der Code nichts speichert, ist das Lesen möglicherweise fehlgeschlagen. Das erste, was zu tun wäre, wäre RTFM auf 'fread()' versuchen herauszufinden, ob dieser Aufruf irgendwie fehlschlagen könnte, und wenn es so wäre, würde es dies dem Anrufer mitteilen. – alk

Antwort

0

Verwendung rewind() Funktion nach dem fgetc() die die Dateiposition auf den Anfang der Datei des gegebenen Strom setzt. Wie,

0

Wenn Sie Zeichen in Datei zählen, bewegen Sie fpos Zeiger auf EOF. Dann versuchen Sie, die gezählte Anzahl von Zeichen zu lesen, was unmöglich ist, ohne den Anfang der Datei zurückzuspulen. Sie müssen zurückspulen.