Namespaces
Variants

fread

From cppreference.net
< c ‎ | io
Definiert in Header <stdio.h>
size_t fread ( void * buffer, size_t size, size_t count,
FILE * stream ) ;
(bis C99)
size_t fread ( void * restrict buffer, size_t size, size_t count,
FILE * restrict stream ) ;
(seit C99)

Liest bis zu count Objekte in das Array buffer aus dem gegebenen Eingabestrom stream ein, als ob fgetc size Mal für jedes Objekt aufgerufen würde, und speichert die Ergebnisse in der erhaltenen Reihenfolge in den aufeinanderfolgenden Positionen von buffer , das als ein Array von unsigned char reinterpretiert wird. Die Dateipositionsanzeige für den Strom wird um die Anzahl der gelesenen Zeichen vorgerückt.

Wenn ein Fehler auftritt, ist der resultierende Wert des Dateipositionsindikators für den Stream unbestimmt. Wenn ein teilweises Element gelesen wird, ist sein Wert unbestimmt.

Inhaltsverzeichnis

Parameter

buffer - Zeiger auf das Array, in dem die gelesenen Objekte gespeichert werden
size - Größe jedes Objekts in Bytes
count - Anzahl der zu lesenden Objekte
stream - der zu lesende Stream

Rückgabewert

Anzahl der erfolgreich gelesenen Objekte, was weniger sein kann als count falls ein Fehler oder Dateiende-Bedingung auftritt.

Wenn size oder count null ist, gibt fread null zurück und führt keine weitere Aktion aus.

fread unterscheidet nicht zwischen Dateiende und Fehler, und Aufrufer müssen feof und ferror verwenden, um zu bestimmen, was aufgetreten ist.

Beispiel

#include <stdio.h>
enum { SIZE = 5 };
int main(void)
{
    const double a[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0};
    printf("Array has size %ld bytes, element size: %ld\n", sizeof a, sizeof *a);
    FILE *fp = fopen("test.bin", "wb"); // must use binary mode
    fwrite(a, sizeof *a, SIZE, fp); // writes an array of doubles
    fclose(fp);
    double b[SIZE];
    fp = fopen("test.bin","rb");
    const size_t ret_code = fread(b, sizeof b[0], SIZE, fp); // reads an array of doubles
    if (ret_code == SIZE)
    {
        printf("Array at %p read successfully, contents:\n", (void*)&a);
        for (int n = 0; n != SIZE; ++n)
            printf("%f ", b[n]);
        putchar('\n');
    }
    else // error handling
    {
        if (feof(fp))
            printf("Error reading test.bin: unexpected end of file\n");
        else if (ferror(fp))
            perror("Error reading test.bin");
    }
    fclose(fp);
}

Mögliche Ausgabe:

Array has size 40 bytes, element size: 8
Array at 0x1337f00d6960 read successfully, contents:
1.000000 2.000000 3.000000 4.000000 5.000000

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.21.8.1 Die fread-Funktion (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.21.8.1 Die fread-Funktion (S: 243-244)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.21.8.1 Die fread-Funktion (S: 335)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.19.8.1 Die fread-Funktion (S: 301)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.9.8.1 Die fread-Funktion

Siehe auch

liest formatierten Input von stdin , einem Dateistrom oder einem Puffer
(Funktion)
liest eine Zeichenkette aus einem Dateistrom
(Funktion)
schreibt in eine Datei
(Funktion)