// stream.c
// Программа динамически выделяет память для чтения из файла.
// При заполнении выделенной памяти, она перераспределяется
// вызовом realloc, увеличивая размер массива на шаг STEP.
// После достижения EOF, файл выводится на констоль. Также
// выводится конечный размер массива для хранения файла в куче.
#include <stdio.h>
#include <stdlib.h>
#define STEP 100
int main(void)
{
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");
record = NULL;
return 0;
}
Ly8gc3RyZWFtLmMKLy8g0J/RgNC+0LPRgNCw0LzQvNCwINC00LjQvdCw0LzQuNGH0LXRgdC60Lgg0LLRi9C00LXQu9GP0LXRgiDQv9Cw0LzRj9GC0Ywg0LTQu9GPINGH0YLQtdC90LjRjyDQuNC3INGE0LDQudC70LAuCi8vINCf0YDQuCDQt9Cw0L/QvtC70L3QtdC90LjQuCDQstGL0LTQtdC70LXQvdC90L7QuSDQv9Cw0LzRj9GC0LgsINC+0L3QsCDQv9C10YDQtdGA0LDRgdC/0YDQtdC00LXQu9GP0LXRgtGB0Y8KLy8g0LLRi9C30L7QstC+0LwgcmVhbGxvYywg0YPQstC10LvQuNGH0LjQstCw0Y8g0YDQsNC30LzQtdGAINC80LDRgdGB0LjQstCwINC90LAg0YjQsNCzIFNURVAuCi8vINCf0L7RgdC70LUg0LTQvtGB0YLQuNC20LXQvdC40Y8gRU9GLCDRhNCw0LnQuyDQstGL0LLQvtC00LjRgtGB0Y8g0L3QsCDQutC+0L3RgdGC0L7Qu9GMLiDQotCw0LrQttC1Ci8vINCy0YvQstC+0LTQuNGC0YHRjyDQutC+0L3QtdGH0L3Ri9C5INGA0LDQt9C80LXRgCDQvNCw0YHRgdC40LLQsCDQtNC70Y8g0YXRgNCw0L3QtdC90LjRjyDRhNCw0LnQu9CwINCyINC60YPRh9C1LgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBTVEVQIDEwMAoKaW50IG1haW4odm9pZCkKewoJc3lzdGVtKCJjaGNwIDEyNTEiKTsKCglpbnQgc2l6ZSA9IFNURVA7CglGSUxFICpzdHJlYW0gPSBmb3BlbigiZmlsZS50eHQiLCJyIik7CgljaGFyICpyZWNvcmQgPSAoY2hhciAqKW1hbGxvYyhzaXplKnNpemVvZihjaGFyKSk7CgoJaWYgKHN0cmVhbSkgewoJCWludCBjLCBpOwoJCWZvciAoaSA9IDA7IChjPWZnZXRjKHN0cmVhbSkpICE9IEVPRjsgKytpKSB7CgkJCWlmIChpID49IHNpemUtMSkgewoJCQkJc2l6ZSArPSBTVEVQOwoJCQkJcmVjb3JkID0gKGNoYXIgKilyZWFsbG9jKHJlY29yZCxzaXplKnNpemVvZihjaGFyKSk7CgkJCX0KCQkJcmVjb3JkW2ldID0gYzsKCQl9CgkJcmVjb3JkW2ldID0gJ1wwJzsKCX0KCWVsc2UKCQlwcmludGYoItCe0YjQuNCx0LrQsCEg0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuy5cbiIpOwoKCWZjbG9zZShzdHJlYW0pOwoKCXByaW50ZigiJXNcbiIscmVjb3JkKTsKCXByaW50ZigiJWRcbiIsc2l6ZSk7CgoJZnJlZShyZWNvcmQpOwoJcmVjb3JkID0gTlVMTDsKCglzeXN0ZW0oInBhdXNlIik7CglyZXR1cm4gMDsKfQ==