Neu zuteilen des Gedächtnisses
Es ist viele Male möglich, während du programmierst, daß du Gedächtnis neu zuteilen möchtest. Dieses wird mit der realloc Funktion getan. Die realloc Funktion nimmt zwei Parameter, die Basisadresse des Gedächtnisses, das du die Größe neu bestimmen möchtest und den Platz du aufheben möchtest und Rückkehr ein Zeiger zur Basisadresse.
Annehmen, daß wir Raum für einen Zeiger aufgehoben haben, der Msg genannt wird und wir Raum zum Platz, das er, bereits aufnimmt, plus die Länge einer anderen Zeichenkette neu zuteilen möchten, dann wir das folgende verwenden könnten.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
Das folgende Programm veranschaulicht den Gebrauch von malloc, realloc und gibt frei. Der Benutzer betritt eine Reihe Zeichenketten die zusammen verbunden werden. Das Programm stoppt Lesezeichenketten, wenn eine leere Zeichenkette betreten wird.
#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;
}
Der Ausgang des Programms ist, wie folgt:
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 |
|