2012-12-13 19 views
7

Mam następujący kod w C:Jak sprawdzić, czy pusta tablica w 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 
{ 
    ... 
} 

Zawsze wykonuje stan else nawet jeśli results[1] jest pusty.

Próbowałem z results[1] == NULL, ale bez powodzenia.

Jak mogę sprawdzić, czy jest pusty, czy nie?

+0

[Najlepszym sposobem, aby sprawdzić, czy tablica jest pusta znaków] (http://stackoverflow.com/questions/1793867/best -wyjście-do-sprawdzenia-jeśli-tablica-znaków-jest pusta) – ljedrz

Odpowiedz

9

Inicjalizacja tablicy results więc wszystkie elementy są NULL:

char* results[10] = { NULL }; 

W pisał kod elementy są unitialized i będzie trzymając wartości losowe.

Dodatkowo zapobiega wykraczających poza granice tej results tablicy:

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

Nie ma czegoś takiego jak „pustej tablicy” lub „pusty element” w C. Tablica zawsze utrzymuje stałą pre- określona liczba elementów i każdy element zawsze ma pewną wartość.

Jedynym sposobem na wprowadzenie pojęcia "pustego" elementu jest samodzielne zaimplementowanie go. Musisz zdecydować, która wartość elementu zostanie użyta jako "pusta wartość". Następnie musisz zainicjować elementy tablicy z tą wartością. Później porównasz elementy z tą "pustą" wartością, aby zobaczyć, czy są ... cóż, puste.

W twoim przypadku tablica, o której mowa, składa się ze wskaźników. W tym przypadku dobór wartości wskaźnika zerowego jako wartości zarezerwowanej oznaczającej element "pusty" jest oczywistym dobrym wyborem. Deklarują swoją tablicę wyników jako

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

później sprawdzić elementy jak

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

Dzięki za wyjaśnienie. To działa dobrze. – user1893187

+0

Czy możemy sprawdzić, czy tablica jest pusta, jeśli nie zainicjujemy jej? 'int arr [10];'. – dud3

Powiązane problemy