2010-05-30 7 views
0

Il est de here, mais échoue lors de la compilation:Quels fichiers d'en-tête sont nécessaires pour exécuter cet extrait de code?

int main(int argc, char **argv) 
{ 
    struct hostent { 
     char *h_name; // main name 
     char **h_aliases; // alternative names (aliases) 
     int h_addrtype; // address type (usually AF_INET) 
     int h_length; // length of address (in octets) 
     char **h_addr_list; // alternate addresses (in Network Byte Order) 
    }; 
    #define h_addr h_addr_list[0] // First address of h_addr_list. 


    struct hostent *info_stackoverflow; 
    int i = 0; 
    info_stackoverflow = gethostbyname("www.stackoverflow.com"); 
    printf("The IP address of %s is %s", 
      info_stackoverflow->h_name, 
      inet_ntoa(* ((struct in_addr *)info_stackoverflow->h_addr))); 
    /* aliases */ 
    while(*(pc_ip->h_aliases + i) != NULL) 
    { 
     printf("\n\tAlias: %s", *(pc_ip->h_aliases + i)); 
     i++; 
    } 
} 

Répondre

0
#include <stdio.h> 
#include <winsock.h> 

Bien que struct hostent est déjà défini par Winsock, de sorte que vous voulez supprimer la définition de hostent de votre extrait de code.

Comme dmazzoni l'a noté, pc_ip n'est pas déclaré dans ce code. Il est utilisé comme un pointeur vers une structure hostent, donc vous pouvez probablement remplacer pc_ip par info_stackoverflow.

Lorsque vous liez, vous devrez faire un lien vers ws2_32.lib. Au moment de l'exécution, vous aurez probablement des problèmes jusqu'à ce que vous ajoutiez un appel à WSAStartup au début de votre code, et WSACleanup à la fin, avant que vous reveniez de main.

+0

Pouvez-vous comprendre comment 'pc_ip' est défini? – httpinterpret

+0

Oh, après avoir remplacé pc_ip avec info_stackoverflow, j'ai eu une erreur lors de la liaison: 'error LNK2019: symbole externe non résolu _inet_ntoa @ 4 référencé' – httpinterpret

+0

Il compile OK maintenant, mais obtient une violation d'accès sur cette ligne' inet_ntoa (* ((struct in_addr *) info_stackoverflow-> h_addr))); ' – httpinterpret

0

Vous avez besoin de ces trois têtes:

#include <stdio.h> 
#include <netdb.h> 
#include <arpa/inet.h> 

Vous devez vous débarrasser de votre propre définition de struct hostent. C'est déjà défini pour vous dans netdb.h, et votre définition sera en conflit. Astuce: essayez "man gethostbyname" sur presque tous les systèmes Unix; la page de manuel pour la plupart des fonctions C vous dira quels fichiers d'en-tête inclure.

Cela ne compilera toujours pas, car pc_ip n'est pas défini. Il vous manque une partie de votre extrait de code, je suppose.

+0

Quelles bibliothèques sont également nécessaires? – httpinterpret

+0

Aucune, ces fonctions sont dans la bibliothèque C standard. – dmazzoni

Questions connexes