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);
}
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
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
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