Es ist syntaktisch korrekt und erzeugt ein NULL-terminiertes Array von Strings.
argv wird an main
als char*[]
(oder äquivalent an char**
) übergeben, aber es ist "korrekter", String-Literale als const char*
und nicht als char*
zu behandeln. In diesem Beispiel möchten Sie const char *argv[] = {"foo", "bar", NULL };
Vielleicht initiierst du es nicht wirklich mit "foo", sondern mit einer veränderbaren Zeichenkette, die du mit argv modifizieren willst. In diesem Fall ist char*[]
richtig. Das ist die Art von Dingen, die Charles wahrscheinlich meint, wenn man sagt, dass Code "korrekt" ist, hängt davon ab, was man damit macht.
Es gibt offensichtlich nichts falsches an der Deklaration oder der Initialisierung, aber ob es "richtig" ist, hängt davon ab, was der Rest des Codes tatsächlich mit argv
macht.
Ja, Ihr Code ist formal korrekt (siehe Steve's Bemerkung zu const
though). Es wird ein Array erzeugt, das mit einem Nullzeiger vom Typ char *
beendet wird.
Sie können das auch tun
%Vor%oder
%Vor%wenn Ihr Array aus irgendeinem Grund eine bestimmte Größe haben muss. In diesem Fall werden die zusätzlichen Elemente auch auf Nullzeiger gesetzt, obwohl Sie sie nicht explizit initialisieren. Aber ich würde sagen, dass es auch in diesem Fall besser ist,
zu verwenden %Vor%weil das sicherstellen wird, dass das Array tatsächlich lang genug ist, um Null-terminiert zu bekommen (wenn das Array zufällig zu kurz ist, erzeugt der Compiler eine Diagnosemeldung).