Динамическое распределение памяти для символьной строки - C (СИ)
Формулировка задачи:
Объясните, пожалуйста, почему при динамическом распределнии памяти под символьный массив у меня все время выделяется памяти только под 8 символов, дальше увеличения памяти с помощью realloc не идет
int main(int argc, char* argv[]) {int i,count=0; char *arr=(char *)malloc(sizeof(char)); SetConsoleOutputCP(1251); SetConsoleCP(1251); printf("Пожалуйста, введите ваш текст\n"); for (i=0; (*(arr+i)!='\n'); i++) {(*(arr+i))=getchar(); arr=(char *)realloc(arr,2*sizeof(char)); if (*(arr+i)=='\n') {arr=(char *)realloc(arr,2*sizeof(char)); *(arr+i)='\0';} }
нашел ошибку. теперь выделение идет правильно.
arr=(char *)realloc(arr,2*sizeof(char));
хотя нет. память выделяется нормально, но цикл не прерывается, даже если убрать эти строки
if (*(arr+i)=='\n') {arr=(char *)realloc(arr,2*sizeof(char)); *(arr+i)='\0';}
Решение задачи: «Динамическое распределение памяти для символьной строки»
textual
Листинг программы
int k = getchar(); ... *arr+i) = k;
Объяснение кода листинга программы
- Программа считывает символ из стандартного ввода (getchar()).
- Затем этот символ присваивается переменной
k
. - Далее происходит динамическое выделение памяти под массив символов.
- В цикле происходит запись символа
k
в массив символов. - Переменная
i
увеличивается на единицу после каждой записи символа в массив. - Переменная
arr
является указателем на начало массива символов. - Значение
i
используется как индекс для доступа к элементу массива, которому присваивается значениеk
. - После завершения цикла, в массиве символов будет последовательность символов, которые были введены с клавиатуры.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д