記憶の再割当て
それは記憶を再割当てしたいと思うことプログラムしている間可能何回もである。 これはrealloc機能とされる。 realloc機能はあなたがサイズ調整をしたいと思う記憶の2つの変数、基底アドレスおよびあなたがおよび基底アドレスへのリターンポインター確保したいと思う空きを取る。
私達がmsgと呼ばれるポインターのためにスペースを確保し、それから私達が次を使用できることを既にとる別のひもの長さと空きにスペースを、再割当てしたいと思うことを仮定しなさい。
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 |
|