User Tools

Site Tools

Return to Home page

Write and read a binary file (fwrite and fread)


Functions fwrite and fread for writing and reading a binary file.

After the writing of a vector of structures (the elements of the structure are a vector of characters containing the name of a student, a variable of type unsigned int containing the student identifier and a variable of type float containing the average value of the scores of the exams attended by the student), the program must:

  • open in write mode a file with name “out.bin”, in order to store in the file the vector of structures
  • written the file in a binary way by using the function fwrite
  • close the file
  • reopen the file for reading it
  • read the file by using the function fread and fill the vector of structures with the read data
  • print all the data contained in the vector of structures
  • close the file

Video solution:
Video with the explanation of the solution:


/* Write and read a binary file (fwrite and fread) */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 50
#define N_STUD 2
typedef struct stud{
  char name[LEN+1];
  unsigned int id;
  float average;
int main() {
  FILE *fp;
  stud_t student[N_STUD];
  int i;
  char row[LEN+1];
  unsigned int n_stud;
  strcpy(student[0].name, "Steven");
  student[0].id = 120000;
  student[0].average = 25.5;
  strcpy(student[1].name, "Julia");
  student[1].id = 120001;
  student[1].average = 28.5;
  fp = fopen("out.bin", "w"); /* Open the file for writing */
  if (fp == NULL){
    printf("Error: file out.bin cannot be opened\n");
  /* Write the file */
  /* NOTE 2: a binary file sometimes cannot be readable 
     correctly in a PC that it is not the one which generates it, 
     because, for instance, integer numbers can be coded with a
     different number of bytes.
  /* Write in binary all the data contained in the structure */
  fwrite(student, sizeof(stud_t), N_STUD, fp); 
     The dimension of the generated file will be:
     in the case of the computer used to test the program:
     2*60 = 120 byte
  fclose(fp); /* Close the file */
  fp = fopen("out.bin", "r"); /* Open the file for reading */
  if (fp == NULL){
    printf("Error: file out.bin cannot be opened\n");
  /* Read the file */
  n_stud = 0;
  while( fread(&student[n_stud], sizeof(stud_t), 1, fp) == 1 ) {
  fclose(fp); /* Close the file */
  /* Print the read records */
  for (i=0; i<n_stud; i++) {
    printf("%s %d %f\n", student[i].name, student[i].id, student[i].average);
  return 0;

If you found any error, or if you want to partecipate to the editing of this wiki, please contact: admin [at]

You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url:
/web/htdocs/ · Last modified: 2024/04/08 22:35 by

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki
Privacy Policy