Korrekter Weg, um ein NULL-terminiertes Array von Strings in C zu initialisieren

8

Stimmt dieser Code?

%Vor%     
jjardon 01.05.2010, 17:16
quelle

3 Antworten

8

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.

    
Steve Jessop 01.05.2010, 18:46
quelle
5

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.

    
Charles Bailey 01.05.2010 17:19
quelle
0

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).

    
AnT 01.05.2010 19:18
quelle

Tags und Links