Работа с 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
, чтобы указать на новый блок памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д