char szPath[MAX_PATH+1] = {0} und memset(szPAth,0,MAX_PATH); Wo ist de Unterschied?
-
Hallole mal wieder.
Der Titel sagt schon alles.
Ich habe in einem Code beispiel von Microsoft diese Zeile gefunden:
char szPath[MAX_PATH+1] = {0}Es wird also eine Variable Namens szPath mit 261 Zeichen (MAX_PATH=260) deklariert.
Dann wird diese Variable mit {0} initialisiert.ICh habe das so bisher noch nie gesehen und habe bisher immer
memset(szPath,0,MAX_PATH)angewendet.
Doch wo ist da der Unterschied?
Ist das Beispiel von MS dasselbe oder was anderes?
Und warum steht die 0 in Klammern?Danke schonmal Mondmann
-
Du definierst hier ein Array von Zeichen. Arrays kann man in C(++) mit einer Liste von Elementen initialisieren. Diese Liste wird in geschweifte Klammern eingeschlossen, deshalb die Klammern

Grundsätzlich gilt: Wenn ein Initialisierer angegeben ist, werden alle überschüssigen Elemente default-initialisiert (d.h. mit 0). In C++ dürfte man sogar alle Elemente auslassen, um eine vollständige Default-Initialisierung zu erreichen. Beispiel:
char a1[10] = { 'h', 'i' }; // Im Array steht jetzt "hi\0\0\0\0\0\0\0\0" char a2[10] = {}; // Im Array stehen nur Nullen char a3[10]; // Im Array stehen zufällige Werte, wenn dies ein automatisches Array istÄltere Compiler könnten diese Regel allerdings missachten.
Fazit: Bei ausreichend aktuellem Compiler wäre
char array[length] = {};vom Ergebnis her identisch zu
char array[length]; memset(array, 0, length);
-
EDIT: Hat sich erledigt.
-
Vielen Dank für die Aufklärung!
An sowas habe ich noch gar nicht gedacht:-)
Dann kann ich mir also in Zukunft das memset sparen und ={0} schreiben?Das bedeutet also konkret:
Mit dem einen Zeichen {0} initialisiere ich das ERSTE Zeichen und C++ setzt automatisch die restlichen auf \0. Sonst müsste ich ja lt.obigem Beispiel ={0,0,0,0.....bis 261} also 261x 0 schreiben.Habe ich das so richtig verstanden?
-
Es wird mit so vielen Zeichen initialisiert wie angegeben sind. Fehlende Zeichen werden durch per Standardkonstruktor (oder 0 bei PODs) ergänzt.
-
Alles klar.
Vielen Dank allen.Mondmann