Which header files are necessary to run this code snippet?
It's from here,but fails when compiling:
int main(int argc, char **argv)
{
struct hostent {
char *h_name; // main name
char **h_aliases; // alternative na开发者_JAVA技巧mes (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++;
}
}
#include <stdio.h>
#include <winsock.h>
Though struct hostent
is already defined by Winsock, so you will want to remove the definition of hostent
from your code snippet.
As dmazzoni has noted, pc_ip
is not declared in that code. It is being used like a pointer to a hostent
structure, so you could probably replace pc_ip
with info_stackoverflow
.
When you link, you will need to link against ws2_32.lib
. At run-time, you'll probably have problems until you add a call to WSAStartup
at the beginning of your code, and WSACleanup
at the end, before you return from main
.
You need these three headers:
#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
You should get rid of your own definition of struct hostent. It's already defined for you in netdb.h, and your definition will conflict.
Tip: try "man gethostbyname" on almost any Unix system; the manual page for most C functions will tell you what header files to include.
This still won't compile, because pc_ip is undefined. You're missing part of your code snippet, I guess.
精彩评论