ここに私が書いたコードを含めます。コードはコンパイルおよび実行されますが、IP アドレスが出力されず、代わりに以下の出力が得られます。以下のコードを含めました。助けてください。
//This is the executed code printed out
-Inspiron-1318:~$ ./com2 google.com
Networks use Big Endian order
This machine uses Little Endian
google.com to
// here I need to print the ip addresses but I am unable to//
これは私が書いたコードです。私の間違いを見つけるのを手伝ってください:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <arpa/inet.h>
void checkEndian()
{
uint32_t a=0x10de7623;
uint32_t b = ntohl(a);
if(b == a)
{
printf("This machine uses Big Endian\n");
}
else if(b ==0x2376de10 )
{
printf("\nThis machine uses Little Endian\n");
}
else
{
printf("This machine uses Other Endian\n");
}
}
int main(int argc,char* argv[])
{
printf("Networks use Big Endian order\n");
checkEndian();
if(argc<2)
{
printf("expected a name for resolving");
exit(1);
}
char *name=argv[1];
char ip[100];
name_ip(name , ip);
printf("%s to %s\n",name,ip);
}
int name_ip(char *name,char *ip)
{
struct addrinfo hints , *answer , *h;
char buf[1024];
memset(&hints,0,sizeof hints);
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
int error = getaddrinfo(name, NULL, &hints, &answer);
if(error!=0)
{
fprintf(stderr,"\n error in getaddrinfo: %s\n",gai_strerror(error));
exit(EXIT_FAILURE);
}
for(h = answer; h != NULL; h = h->ai_next)
{
if(h->ai_family=AF_INET)
{
struct sockaddr_in *x;
x=(struct sockaddr_in *)h->ai_addr;
//// this inet_ntop is the root of whole problem//
inet_ntop(h->ai_family,&(((struct sockaddr_in *)h->ai_addr)->sin_addr),buf,1024);
}
if(hints.ai_family=AF_INET6)
{
struct sockaddr_in6 *x;
x=(struct sockaddr_in6*)h->ai_addr;
// this inet_ntop is the root of whole problem//
inet_ntop(h->ai_family,&(((struct sockaddr_in6 *)h->ai_addr)->sin6_addr),buf,1024);
}
printf("%s\n",ip);
}
freeaddrinfo(answer);
return 0;
}