Ja, Speicher, den Sie von malloc
zurückbekommen, ist nicht initialisiert. Im Allgemeinen enthält es unvorhersehbare, zufällige Werte. Zufällig könnten die Zufallswerte 0 sein - aber darauf kann man überhaupt nicht zählen.
Also, ja, wenn Sie sich interessieren, müssen Sie immer den Speicher initialisieren, den Sie von malloc
zurückbekommen. Ein Weg ist, indem Sie memset
aufrufen - obwohl das von Ihnen gepostete Beispiel ungewöhnlich ist. Wenn Sie den gesamten Speicher auf Null wollen bekam man nur zurück, würde die übliche Anruf sein
memset(assign_value, 0, 10);
(statt malloc
, können Sie auch calloc
verwenden. Sobald Unterschied zwischen malloc
und calloc
ist, dass calloc
automatisch die nicht initialisiert werden neu zugewiesener Speicher für alle 0.)
Wenn Sie assign_value
als Zeichenfolge verwenden und Sie möchten, dass sie als leere Zeichenfolge beginnt, müssen Sie nicht alles auf Null setzen. Es ist nur ausreichend, um ein Null-Zeichen in der ersten Position zu setzen:
*assign_value = '\0';
Sobald Sie all diese Dinge tun, assign_value
wird eine leere Zeichenfolge halten, mit einer Länge von 0, so dass der Test if(strlen(assign_value) == 0)
immer erfolgreich, und In Ihrem späteren Code rufen Sie immer strcpy
, niemals strcat
.
Schließlich müssen Sie als Seitenpunkte nicht mit sizeof(char)
multiplizieren oder das Ergebnis umwandeln, wenn Sie malloc
aufrufen. So könnten Sie die einfachere:
char *assign_value = malloc(10);
(Sie müssen nicht vermehren sich durch sizeof(char)
weil sizeof(char)
ist per Definition immer genau 1. Sie haben nicht ausdrücklich das Ergebnis der malloc
in C zu werfen, und wenn Sie dies tun, kann es Fehler verbergen.)
'malloc' nie initialisieren oder auf Null setzen. Wenn Sie möchten, können Sie mit "memset" danach gehen oder "calloc" verwenden. – ameyCU