2012-12-13 5 views
7

wenn leeres Array zu überprüfen, habe ich den folgenden Code in C:Wie in C

int i = 0; 
char delims[] = " \n"; 
char *result = NULL; 
char * results[10]; 
result = strtok(cmdStr, delims); 
while(result != NULL) 
{ 
    results[i] = result; 
    i++; 
    result = strtok(NULL, " \n"); 
} 

if(!results[1]) 
{ 
    printf("Please insert the second parameter...\n"); 
} 
else 
{ 
    ... 
} 

Es ist immer führt den else Zustand, auch wenn die results[1] leer.

Ich habe versucht mit results[1] == NULL aber keinen Erfolg.

Wie kann ich überprüfen, ob es leer ist oder nicht?

+0

[Der beste Weg, um zu überprüfen, ob ein Zeichenfeld ist leer] (http://stackoverflow.com/questions/1793867/best -way-to-check-wenn-ein-Zeichen-Array-ist-leer) – ljedrz

Antwort

9

Initialisieren der results Array so alle Elemente sind NULL:

char* results[10] = { NULL }; 

In den entsandten Code die Elemente unitialized und werden zufällige Werte abhalten.

Zusätzlich verhindern jenseits der Grenzen des results Array gehen:

while (i < 10 && result) 
{ 
} 
5

Es gibt nicht so etwas wie ein „leeres Array“ oder ein „leeres Element“ in C. Das Array hält immer eine feste Vor- bestimmte Anzahl von Elementen und jedes Element hat immer einen gewissen Wert.

Die einzige Möglichkeit, das Konzept eines "leeren" Elements einzuführen, besteht darin, es selbst zu implementieren. Sie müssen entscheiden, welcher Elementwert reserviert ist, der als "leerer Wert" verwendet werden soll. Dann müssen Sie Ihre Array-Elemente mit diesem Wert initialisieren. Später vergleichen Sie die Elemente mit diesem "leeren" Wert, um zu sehen, ob sie ... nun, leer sind.

In Ihrem Fall besteht das fragliche Array aus Zeigern. In diesem Fall ist die Auswahl des Nullzeigerwerts als reservierter Wert, der ein "leeres" Element bezeichnet, eine offensichtliche gute Wahl. Erklären Sie Ihre Ergebnisse Array als

char * results[10] = { 0 }; // or `= { NULL };` 

ein später die Elemente überprüfen, wie

if (results[i] == NULL) // or `if (!results[i])` 
    /* Empty element */ 
+0

Danke für die Erklärung. Das funktioniert gut. – user1893187

+0

Können wir überprüfen, ob das Array leer ist, wenn wir es nicht initialisieren? 'int arr [10];'. – dud3