Запись буфера в файл с помощью 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 для завершения программы