Динамическое распределение памяти для символьной строки - 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. - После завершения цикла, в массиве символов будет последовательность символов, которые были введены с клавиатуры.