*Markus: (C) Implizite Deklaration der Funktion »strdup«

Beitrag lesen

Hallo,

ich suchte nach einer simplen Methode, ein Verzeichnis auf Linux auszugeben. Dazu fand ich ein schönes Beispiel http://en.wikipedia.org/wiki/Dirent.h. In diesem Abschnitt....

  
while ((dp = readdir (dir)) != NULL) {  
        files[i] = strdup(dp->d_name);  
        if (files[i] == NULL) {  
            /* memory allocation failure; free what's been allocated  
             * so far and return NULL.  
             */  
            while (i > 0) {  
                free (files[--i]);  
            }  
            free (files);  
            return NULL;  
        }  
        printf ("%d: %s\n", i, dp->d_name);  
        i++;  
}  

scheint diese Zeile Warnungen beim Kompilieren auszulösen:

  
files[i] = strdup(dp->d_name);  

own_ls2.c:53: Warnung: Implizite Deklaration der Funktion »strdup«
own_ls2.c:53: Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung

Die zweite Warnung bekomme ich weg, wenn ich eine Typumwandlung durchführe:

  
files[i] = (char *)strdup(dp->d_name);  

Aber ich bin mir nicht ganz sicher, wie ich mit der Warnung "own_ls2.c:53: Warnung: Implizite Deklaration der Funktion »strdup«" umgehen soll. Die Warnung sagt zwar schon alles, aber was bedeutet, dass strdup impilzit deklariert ist?

Danke,
Markus