기억 재배치
당신은 기억을 재배치하고 싶다 당신이 프로그램하고 있는 동안 가능하다 많은 시간. 이것은 realloc 기능으로 행해진다. realloc 기능은 당신이 사이즈를 바꾸고 싶은 기억의 2개의 매개변수, 기반 주소, 및 당신이 그리고 기반 주소에 반환 포인터 비축하고 싶은 공간량을 가지고 간다.
우리가 전갈에게 불린 포인터를 위해 공간을 비축하고 그 때 우리가 뒤에 온 것 사용할 수 있던 이미 채택하는 다른 끈의 길이 플러스 공간량에 공간을, 재배치하고 싶다는 것을 가정하십시오.
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 |
|