Работа с malloc() и realloc() - динамическое изменение размера массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Продолжаю свои эксперименты с динамической памятью. На этот раз хочу сделать так, чтобы одномерный массив символов автоматически изменялся в размере по мере его заполнения символами. Вот код:
#include<stdio.h>
#include<string.h>

int main(void)
{
   int i=0;
   char c;
   char *str;
   str = malloc(2);
 
   while( (c=getchar())!='\n')
   {
       str[i]=c;
       i++;
       realloc(str, i+1);
   }
   str[i]=NULL;
 
   printf("%s", str);
 
   return 0;
}
Проблема в том, что все работает только если вводить меньше 8-ми символов. Где ошибка?

Решение задачи: «Работа с malloc() и realloc() - динамическое изменение размера массива»

textual
Листинг программы
 ... char *tmp;
....
tmp = realloc(str, i+1);
if (tmp==NULL) { printf("Ну ты и жадина!\n"); break; }
else str = tmp;

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

  1. В коде используется функция realloc(), которая изменяет размер выделенной ранее памяти.
  2. Переменная str содержит указатель на начало выделенного ранее массива.
  3. Переменная i содержит индекс, до которого необходимо изменить размер массива.
  4. Переменная tmp используется как временный хранитель для нового блока памяти.
  5. Если функция realloc() вернула значение NULL, то на экран выводится сообщение Ну ты и жадина! и выполнение программы прерывается.
  6. В противном случае, переменная str обновляется значением tmp, чтобы указать на новый блок памяти.

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


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

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

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