Перераспределения памяти
Вполне возможно, много раз, пока вы программирования, которые вы хотите перераспределить память. Это делается с помощью функции realloc. Realloc функция принимает два параметра, базовый адрес памяти, которое вы хотите изменить, и площади Вы хотите зарезервировать, и возвращает указатель на базовый адрес.
Допустим у нас есть отведенное место для указателя сообщ открывается и мы хотим, чтобы перераспределять пространство в размере пространстве, он уже занимает, плюс длину другой строкой тогда мы могли бы использовать следующий.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
Следующая программа иллюстрирует использование malloc, realloc и бесплатно. Пользователь вводит серию строк, которые объединили свои усилия. Программа прекращает чтение строки, когда пустая строка введена.
#include <string.h>
#include <malloc.h>
int main()
{
char buffer[80], *msg;
int firstTime=0;
do
{
printf("\nEnter a sentence: ");
gets(buffer);
if (!firstTime)
{
msg = (char *)malloc((strlen(buffer) + 1) *
sizeof(char));
strcpy(msg, buffer);
firstTime = 1;
}
else
{
msg = (char *)realloc(msg, (strlen(msg) +
strlen(buffer) + 1) * sizeof(char));
strcat(msg, buffer);
}
puts(msg);
} while(strcmp(buffer, ""));
free(msg);
return 0;
}
Выпуск программы будет следующим :
Enter a sentence: Once upon a time
Once upon a time
Enter a sentence: there was a king
Once upon a timethere was a king
Enter a sentence: the king was
Once upon a timethere was a kingthe king was
Enter a sentence:
Once upon a timethere was a kingthe king was |
|