Полностью прочитать файл в переменную - C (СИ)
Формулировка задачи:
Есть файл, с пробелами и энтерами. Надо записать его в одну переменную типа char* заменяя энтеры на \n. То есть, чтобы потом, если его вывести printf'ом получилось то же что и было в файле. Как это сделать?
Решение задачи: «Полностью прочитать файл в переменную»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
FILE* f;
// открываем файл
if((f = fopen("in", "rb")) == NULL){
printf("Error opening file 'in'");
return 0;
}
// узнаем размер файла для создания буфера нужного размера
fseek(f, 0L, SEEK_END);
long size = ftell(f);
fseek(f, 0L, SEEK_SET);
// выделяем память под буфер
char* buf = (char*)malloc(sizeof(char) * size);
// читаем полностью весь файл в буфер
fread(buf, 1, size, f);
// выводим содержимое буфера в стандартный поток
fprintf(stdout, "%s", buf);
// и обязательно освобождаем память выделенную под буфер
free(buf);
// закрываем файл
fclose(f);
return 0;
}
Объяснение кода листинга программы
- Подключаем необходимые библиотеки
- Определяем точку входа в программу
- Объявляем переменные:
FILE* f- указатель на файлchar* buf- указатель на буфер
- Открываем файл в режиме чтения (
rb) - Проверяем, что файл успешно открылся, иначе выводим сообщение об ошибке и завершаем программу
- Узнаем размер файла
- Выделяем память под буфер
- Читаем файл в буфер
- Выводим содержимое буфера на стандартный поток
- Освобождаем память, выделенную под буфер
- Закрываем файл
- Завершаем программу