Нужно написать программу считывающая строку неопределенной строки - C (СИ)

Узнай цену своей работы

Формулировка задачи:

есть File *file либо stdin либо какой то текстовый файл нужно поочередно считывать строку до пробела проблема что строка неограниченна и не должны быть ограниченна то есть хоть 1000 знаков вбей должны быть строка из 1000 символов
int N = 1;
    char *a = malloc(N);
 
......
a = " ";
        while ((c=fgetc(file))!='\n')
        {
            a[N - 1] = (char) c;
            a = realloc(a, N + 1);
            ++N;
 
        }
есть код но он не работает=( может так может fgets надо но чтобы считывалась строка любого размера

Решение задачи: «Нужно написать программу считывающая строку неопределенной строки»

textual
Листинг программы
char *fgm(FILE *f)  // * Чтение строки с выделением памяти  *
{ char *b;  int c, j=0, l=81;
 
   if (f==NULL || feof(f)) return(NULL);
   b = malloc(l);
a: c = getc(f);
   if (c=='\n' || c==EOF) {
       b[j++] = '\0';
       if (j!=l) b = realloc(b,j);
       return(b);
   }
   if (j >= l-1) { l += 80; b = realloc(b,l); }
   b[j++] = c;
   goto a;
}

Объяснение кода листинга программы

  1. Объявлена функция fgm, которая принимает в качестве аргумента файловый указатель f.
  2. Переменная b объявлена как указатель на символ.
  3. Переменная c используется для считывания символа из файла.
  4. Переменная j инициализируется значением 0 и используется для подсчета количества прочитанных символов.
  5. Переменная l инициализируется значением 81 и используется для хранения размера выделенной памяти.
  6. Выполняется проверка на NULL указателя f или на достижение конца файла feof(f). Если условие выполняется, функция возвращает NULL.
  7. Выделяется память с помощью malloc(l).
  8. В цикле считывается каждый символ из файла, пока не будет достигнут конец строки или конца файла.
  9. Если j равен l, то памятьrealloc(b, j) увеличивается на 80 символов.
  10. Каждый считанный символ добавляется в строку, увеличивая значение j на 1.
  11. После достижения конца строки или конца файла, b[j++] = '\0'; добавляет нулевой символ в конец строки.
  12. Если j не равен l, то память realloc(b, j) освобождает лишнюю память.
  13. Функция возвращает указатель на выделенную память b.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5
Похожие ответы