Запись буфера в файл с помощью 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; }
Объяснение кода листинга программы
- Включаем заголовочный файл stdio.h для использования функций ввода-вывода
- Объявляем переменную short buffer[80] для хранения буфера
- Объявляем переменную int i = 0; для итерации по буферу
- Открываем файл f_example для записи в бинарном режиме с помощью функции fopen и сохраняем его указатель в переменную FILE * fd
- Заполняем буфер значениями от 2000 до 2079 с помощью цикла for и присваивания buffer[i] = i + 2000
- Используем функцию fwrite для записи буфера в файл. Первый вариант (неверный) - fwrite(buffer, 1, sizeof(buffer), fd). Второй вариант (верный) - fwrite(buffer, sizeof(short), sizeof(buffer) / sizeof(short), fd)
- Выводим количество записанных элементов с помощью функции printf и форматирования
%lu
- Закрываем файл с помощью функции fclose
- Открываем файл f_example для чтения в бинарном режиме с помощью функции fopen и сохраняем его указатель в переменную FILE * fd_input
- Используем функцию 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)
- Выводим количество прочитанных элементов с помощью функции printf и форматирования
%lu
- Проходим циклом for по буферу и выводим значения с помощью функции printf и форматирования
%d
- Закрываем файл с помощью функции fclose
- Возвращаем 0 для завершения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д