quelque chose à propos de inet_ntoa()
J'écris un serveur à l'aide de la fonction char* inet_ntoa(struct in_addr in),
Quand j'ai inclus l'en-tête
<sys/socket.h>
et <netinet/in.h>
,un binaire exécutable peut être généré avec les avertissements du compilateur, mais un segment de défaut se produit, lorsque le programme de la poignée de la chaîne de retour de inet_ntoa
. Mais quand j'ai ajouté l'en-tête <arpa/inet.h>,
tout semble ok.
Quelle est la question?
- Avez-vous débogué il? Il a couru à travers valgrind?
- Le page de manuel vous dit que vous avez besoin
<arpa/inet.h>
, toujours lire les pages de manuel de la fonction que vous utilisez si vous avez des problèmes avec eux. - Je vous recommandons également d'utiliser
inet_ntop
au lieu de cela, comme il peut gérer de différents protocoles (comme IPv6) et aussi est thread-safe. - Je suppose que vous n'avez pas vérifié les messages d'avertissement du compilateur...
Vous devez vous connecter pour publier un commentaire.
arpa/inet.h
contient la déclaration dechar* inet_ntoa(struct in_addr in)
. Si vous n'incluez pas cet en-tête de votre compilateur utilisera la déclaration implicite deint inet_ntoa()
. Fausse déclaration peut facilement conduire à l'erreur, surtout si vous êtes sur un système oùsizeof(int)!=sizeof(void*)
.Si vous utilisez
gcc
vous pouvez ajouter-Wall
drapeau.gcc
vais vous mettre en garde sur l'utilisation des fonctions sans déclaration explicite.