fork download
  1. // stream.c
  2. // Программа динамически выделяет память для чтения из файла.
  3. // При заполнении выделенной памяти, она перераспределяется
  4. // вызовом realloc, увеличивая размер массива на шаг STEP.
  5. // После достижения EOF, файл выводится на констоль. Также
  6. // выводится конечный размер массива для хранения файла в куче.
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #define STEP 100
  11.  
  12. int main(void)
  13. {
  14. system("chcp 1251");
  15.  
  16. int size = STEP;
  17. FILE *stream = fopen("file.txt","r");
  18. char *record = (char *)malloc(size*sizeof(char));
  19.  
  20. if (stream) {
  21. int c, i;
  22. for (i = 0; (c=fgetc(stream)) != EOF; ++i) {
  23. if (i >= size-1) {
  24. size += STEP;
  25. record = (char *)realloc(record,size*sizeof(char));
  26. }
  27. record[i] = c;
  28. }
  29. record[i] = '\0';
  30. }
  31. else
  32. printf("Ошибка! Не удалось открыть файл.\n");
  33.  
  34. fclose(stream);
  35.  
  36. printf("%s\n",record);
  37. printf("%d\n",size);
  38.  
  39. free(record);
  40. record = NULL;
  41.  
  42. system("pause");
  43. return 0;
  44. }
Runtime error #stdin #stdout #stderr 0s 9424KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
sh: 1: chcp: not found