Нужно написать программу считывающая строку неопределенной строки - 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.