// stream.c
// Программа динамически выделяет память для чтения из файла.
// При заполнении выделенной памяти, она перераспределяется
// вызовом realloc, увеличивая размер массива на шаг STEP.
// После достижения EOF, файл выводится на констоль. Также
// выводится конечный размер массива для хранения файла в куче.

#include <stdio.h>
#include <stdlib.h>
#define STEP 100

int main(void)
{
	system("chcp 1251");

	int size = STEP;
	FILE *stream = fopen("file.txt","r");
	char *record = (char *)malloc(size*sizeof(char));

	if (stream) {
		int c, i;
		for (i = 0; (c=fgetc(stream)) != EOF; ++i) {
			if (i >= size-1) {
				size += STEP;
				record = (char *)realloc(record,size*sizeof(char));
			}
			record[i] = c;
		}
		record[i] = '\0';
	}
	else
		printf("Ошибка! Не удалось открыть файл.\n");

	fclose(stream);

	printf("%s\n",record);
	printf("%d\n",size);

	free(record);
	record = NULL;

	system("pause");
	return 0;
}