Нужно написать программу считывающая строку неопределенной строки - C (СИ)
Формулировка задачи:
есть
File *file либо stdin либо какой то текстовый файл
нужно поочередно считывать строку до пробела
проблема что строка неограниченна и не должны быть ограниченна
то есть хоть 1000 знаков вбей должны быть строка из 1000 символов
есть код
но он не работает=(
может так может fgets надо но чтобы считывалась строка любого размера
int N = 1; char *a = malloc(N); ...... a = " "; while ((c=fgetc(file))!='\n') { a[N - 1] = (char) c; a = realloc(a, N + 1); ++N; }
Решение задачи: «Нужно написать программу считывающая строку неопределенной строки»
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; }
Объяснение кода листинга программы
- Объявлена функция
fgm
, которая принимает в качестве аргумента файловый указательf
. - Переменная
b
объявлена как указатель на символ. - Переменная
c
используется для считывания символа из файла. - Переменная
j
инициализируется значением 0 и используется для подсчета количества прочитанных символов. - Переменная
l
инициализируется значением 81 и используется для хранения размера выделенной памяти. - Выполняется проверка на NULL указателя
f
или на достижение конца файлаfeof(f)
. Если условие выполняется, функция возвращает NULL. - Выделяется память с помощью
malloc(l)
. - В цикле считывается каждый символ из файла, пока не будет достигнут конец строки или конца файла.
- Если
j
равенl
, то памятьrealloc(b, j) увеличивается на 80 символов. - Каждый считанный символ добавляется в строку, увеличивая значение
j
на 1. - После достижения конца строки или конца файла,
b[j++] = '\0';
добавляет нулевой символ в конец строки. - Если
j
не равенl
, то память realloc(b, j) освобождает лишнюю память. - Функция возвращает указатель на выделенную память
b
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д