Работа с 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, чтобы указать на новый блок памяти.