Ich habe Funktionen, die Speicher dynamisch zuweisen, um Strings in char ***
(ein 2D-Array von Strings oder 3D-Array von Zeichen) zu speichern.C Speichern von String-Literalen in dynamischen 2D-Arrays
Ich dachte später, dass es besser wäre, wenn ich sie als String-Literale speichern würde, so änderte ich mein Array zu const char ***
. Dies gibt mir jedoch Fehler, wenn ich strcpy()
und free()
verwende.
error: passing argument 1 of 'strcpy' discards 'const' qualifier from pointer target type
Ich verstehe, dass die Parameter strcpy()
und free()
nehmen sind vom Typ char *
und void *
, aber ich habe auch gelesen, dass es gute Praxis Strings zu speichern in const char *
statt char *
.
Wie soll ich String-Literale verwenden, wenn es nicht für Operationen wie strcpy()
oder free()
verwendet werden kann? Sollte ich es als char ***
anstelle von const char ***
verlassen haben? Da ist etwas Offensichtliches, das ich nicht verstehe.
Weder ein Objekt vom Typ 'char ***' noch das Objekt, auf das es zeigt, ist ein 2D-Array von Strings oder ein 3D-Array von 'char', und diese sind selbst voneinander verschieden. Im Allgemeinen sind Arrays und Zeiger nicht alle gleich und mehrdimensionale Arrays sind Arrays von Arrays, nicht Arrays von Zeigern. –