Динамическое распределение памяти для символьной строки - 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;

Объяснение кода листинга программы

  1. Программа считывает символ из стандартного ввода (getchar()).
  2. Затем этот символ присваивается переменной k.
  3. Далее происходит динамическое выделение памяти под массив символов.
  4. В цикле происходит запись символа k в массив символов.
  5. Переменная i увеличивается на единицу после каждой записи символа в массив.
  6. Переменная arr является указателем на начало массива символов.
  7. Значение i используется как индекс для доступа к элементу массива, которому присваивается значение k.
  8. После завершения цикла, в массиве символов будет последовательность символов, которые были введены с клавиатуры.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы