Warnung “implizite Deklaration der Funktion ‘strlen'” erhalten

Lesezeit: 2 Minuten

Benutzer-Avatar
Joe.Z

Ich habe einen einfachen Code, aber ich erhalte eine Warnung:

-bash-3.2$ gcc -Wall print_process_environ.c -o p_p
print_process_environ.c: In function 'print_process_environ':
print_process_environ.c:24: warning: implicit declaration of function 'strlen'
print_process_environ.c:24: warning: incompatible implicit declaration of built-in function 'strlen'

Folgendes ist der Code:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <strings.h>

    void
    print_process_environ(pid_t pid)
    {
        int     fd;
        char    filename[24];
        char    environ[1024];
        size_t  length;
        char    *next_var;

        snprintf(filename, sizeof(filename), "/proc/%d/environ", (int)pid);
        printf("length of filename: %d\n", strlen(filename));

        fd = open(filename, O_RDONLY);
......

Die Definition von strlen() ist:

   #include <string.h>

   size_t strlen(const char *s);

wie man diese Warnung loswird.

  • Einschließlich strings.h zweimal ist nicht dasselbe wie einschließen string.h einmal…

    – AnT steht zu Russland

    4. November 2013 um 3:20 Uhr

Benutzer-Avatar
Suchvir

es ist #include <string.h> . Du schreibst es in deinem Code falsch. Auch wenn Sie jemals diese Warnung in Ihrem Compiler erhalten … tun Sie dies immer man function_name auf dem Terminal, um den für diese Funktion erforderlichen Header anzuzeigen

 #include <string.h> // correct header
 #include <strings.h> // incorrect header - change this in your code to string.h

  • Wusste nichts von der man function_namewirklich gut zu wissen!

    – Hut

    28. Juni 2018 um 13:36 Uhr

Benutzer-Avatar
Shafik Yaghmur

Sie wurden von einem leicht zu machenden Fehler gebissen, den Sie eingeschlossen haben Posix-Strings.h Header:

#include <strings.h>

Anstatt von:

#include <string.h>

das Posix Header enthält Unterstützung für:

int    bcmp(const void *, const void *, size_t); (LEGACY )
void   bcopy(const void *, void *, size_t); (LEGACY )
void   bzero(void *, size_t); (LEGACY )
int    ffs(int);
char  *index(const char *, int); (LEGACY )
char  *rindex(const char *, int); (LEGACY )
int    strcasecmp(const char *, const char *);
int    strncasecmp(const char *, const char *, size_t);

Dies sind alles nicht standardmäßige Funktionen. Dies erklärt auch das Fehlen von Fehlern. Es fällt mir jedoch schwer, eine gute Referenz zu finden BSD Systemversion von Saiten.h früher auch enthalten string.h.

Benutzer-Avatar
Peter Chaula

Es stellte sich heraus, dass der Code war #include <stdlib.h> und meine Ausgabe war:

Geben Sie hier die Bildbeschreibung ein

Lösung:

Geändert stdlib.h zu stdio.h und die Warnung war weg

Kurz gesagt, der Compiler versucht Ihnen mitzuteilen, dass er die Deklaration einer Funktion nicht finden konnte. Dies ergibt sich aus a). Keine Header-Datei enthalten b) falscher Header-Dateiname .eg” sring.h”

1368940cookie-checkWarnung “implizite Deklaration der Funktion ‘strlen'” erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy