Работа с malloc() и realloc() - динамическое изменение размера массива - C (СИ)
Формулировка задачи:
Всем привет.
Продолжаю свои эксперименты с динамической памятью.
На этот раз хочу сделать так, чтобы одномерный массив символов автоматически изменялся в размере по мере его заполнения символами. Вот код:
Проблема в том, что все работает только если вводить меньше 8-ми символов. Где ошибка?
Листинг программы
- #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;
- }
Решение задачи: «Работа с malloc() и realloc() - динамическое изменение размера массива»
textual
Листинг программы
- ... char *tmp;
- ....
- tmp = realloc(str, i+1);
- if (tmp==NULL) { printf("Ну ты и жадина!\n"); break; }
- else str = tmp;
Объяснение кода листинга программы
- В коде используется функция realloc(), которая изменяет размер выделенной ранее памяти.
- Переменная
str
содержит указатель на начало выделенного ранее массива. - Переменная
i
содержит индекс, до которого необходимо изменить размер массива. - Переменная
tmp
используется как временный хранитель для нового блока памяти. - Если функция realloc() вернула значение NULL, то на экран выводится сообщение
Ну ты и жадина!
и выполнение программы прерывается. - В противном случае, переменная
str
обновляется значениемtmp
, чтобы указать на новый блок памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д