Запись буфера в файл с помощью fwrite - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, столкнулся с такой проблемой. Запись в файл с помощью fwrite. Нужно записать буфер в файл.
short buffer[80];
int i =0;
 
FILE* fd("file/one.txt");
 
for (i = 0; i < 80; i++) {
     buffer[i] = i;
}

fwrite(buffer, 80 * sizeof(short), 1, fd);
Запись осуществляется без ошибок, но не корректно.

Решение задачи: «Запись буфера в файл с помощью fwrite»

textual
Листинг программы
#include <stdio.h>
 
int main() {
 
    short buffer[ 80 ];
    int i = 0;
 
    // откроем файл для записи в бинарном режиме
    FILE * fd = fopen( "f_example", "wb" );
 
    for ( i = 0; i < 80; ++i ) {
        buffer[ i ] = i + 2000; // добавили 2000
    }
 
    // size_t count_write = fwrite( buffer, 1, sizeof( buffer ), fd ); // неверный вариант
    size_t  count_write = fwrite( buffer, sizeof( short ), sizeof( buffer ) / sizeof( short ), fd ); // верный вариант
    printf( "%lu\n", count_write );
 
 
 
    fclose( fd );
 
    // далее считываем значения из только что записанного файла
 
    short buffer_from_file[ 80 ];
 
    // откроем файл для чтения в бинарном режиме
    FILE * fd_input = fopen( "f_example", "rb" );
 
 
    //size_t count_read = fread( buffer_from_file, 1, sizeof( buffer_from_file ), fd_input ); // неверный вариант
    size_t count_read = fread( buffer_from_file, sizeof( short ), sizeof( buffer_from_file ) / sizeof( short ), fd_input ); // верный вариант
    printf( "%lu\n", count_read );
 
    for ( i = 0; i < 80; ++i ) {
        printf( "%d ", buffer_from_file[ i ] );
    }
 
    fclose( fd_input );
    return 0;
}

Объяснение кода листинга программы

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Объявляем переменную short buffer[80] для хранения буфера
  3. Объявляем переменную int i = 0; для итерации по буферу
  4. Открываем файл f_example для записи в бинарном режиме с помощью функции fopen и сохраняем его указатель в переменную FILE * fd
  5. Заполняем буфер значениями от 2000 до 2079 с помощью цикла for и присваивания buffer[i] = i + 2000
  6. Используем функцию fwrite для записи буфера в файл. Первый вариант (неверный) - fwrite(buffer, 1, sizeof(buffer), fd). Второй вариант (верный) - fwrite(buffer, sizeof(short), sizeof(buffer) / sizeof(short), fd)
  7. Выводим количество записанных элементов с помощью функции printf и форматирования %lu
  8. Закрываем файл с помощью функции fclose
  9. Открываем файл f_example для чтения в бинарном режиме с помощью функции fopen и сохраняем его указатель в переменную FILE * fd_input
  10. Используем функцию fread для чтения буфера из файла. Первый вариант (неверный) - fread(buffer_from_file, 1, sizeof(buffer_from_file), fd_input). Второй вариант (верный) - fread(buffer_from_file, sizeof(short), sizeof(buffer_from_file) / sizeof(short), fd_input)
  11. Выводим количество прочитанных элементов с помощью функции printf и форматирования %lu
  12. Проходим циклом for по буферу и выводим значения с помощью функции printf и форматирования %d
  13. Закрываем файл с помощью функции fclose
  14. Возвращаем 0 для завершения программы

Оцени полезность:

14   голосов , оценка 3.786 из 5