Как создать динамический массив типа char, не запрашивая заранее его длину? - C (СИ)
Формулировка задачи:
Например, пользователь должен ввести арифметическое выражение. Он не знает, сколько это будет символов. Как в таком случае задать динамический массив?
Решение задачи: «Как создать динамический массив типа char, не запрашивая заранее его длину?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define size 256 char *GetLongLongLine(FILE *f) { int k = 0; char *buf = (char*) malloc(size); char *res = (char*) malloc(size); while(fgets (buf , size , f) != NULL) { if(k > 0) { k++; res = (char*) realloc(res, k*size); strcat(res, buf); } else { k++; strcpy(res,buf); } if(strlen(buf) < size-1) break; } res[strlen(res)-1] = '\0'; free(buf); return res; } int main() { char *myLongLine = GetLongLongLine(stdin); printf("\n%s", myLongLine); free(myLongLine); getchar(); return 0; }
Объяснение кода листинга программы
- В функции
GetLongLongLine
создается динамический массив типаchar
с помощью функцииmalloc
. Изначально выделяется память под строку максимальной длиной 256 символов. - В цикле
while
происходит чтение строк из файла с помощью функцииfgets
. Если строка успешно прочитана, то она добавляется к результату. - Если строка не пустая и длина результата превышает размер выделенной памяти, то память увеличивается с помощью функции
realloc
и результат дополняется до конца строки. - Если строка пустая, то результат дополняется нулевым символом.
- В конце функции результат освобождается от лишней памяти с помощью функции
free
и возвращается. - В функции
main
вызывается функцияGetLongLongLine
с аргументомstdin
, чтобы считать строку с клавиатуры. - Результат функции
GetLongLongLine
выводится на экран с помощью функцииprintf
. - Память, выделенная под результат, освобождается с помощью функции
free
. - Программа завершается с помощью функции
getchar
иreturn 0
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д