当前位置: 技术问答>linux和unix
域名解析
来源: 互联网 发布时间:2016-06-07
本文导语: 我自己写了个函数: char *nametochar(char *name) { struct hostent *host; char **p; char addr[100]; host=gethostbyname(name); p=host->h_addr_list; return(inet_ntop(AF_INET,*p,addr,100)); } int main(int argc,char *argv[]) { printf("%sn",nametochar(argv[1])); return ...
我自己写了个函数:
char *nametochar(char *name)
{
struct hostent *host;
char **p;
char addr[100];
host=gethostbyname(name);
p=host->h_addr_list;
return(inet_ntop(AF_INET,*p,addr,100));
}
int main(int argc,char *argv[])
{
printf("%sn",nametochar(argv[1]));
return 0;
}
但是解析出来的ip地址却是乱码...
不知道为什么...
char *nametochar(char *name)
{
struct hostent *host;
char **p;
char addr[100];
host=gethostbyname(name);
p=host->h_addr_list;
return(inet_ntop(AF_INET,*p,addr,100));
}
int main(int argc,char *argv[])
{
printf("%sn",nametochar(argv[1]));
return 0;
}
但是解析出来的ip地址却是乱码...
不知道为什么...
|
你这种用法是没有问题的。问题出在你的存放解释出来的IP地址的内存空间: addr[100],它是放在stack上面,函数nametochar()返回的时候,这个addr[]对应的内存块就被用作他用了。把addr[100]移到全局,或者作为main()的变量,然后传到nametochar(),就可以了:
#include
#include
#include
char addr[100];
char *
nametochar (char *name)
{
struct hostent *host;
char **p, *ip;
host = gethostbyname (name);
p = host->h_addr_list;
ip = inet_ntop (AF_INET, *p, addr, 100);
return ip;
}
int
main (int argc, char *argv[])
{
printf ("%sn", nametochar (argv[1]));
return 0;
}
#include
#include
#include
char addr[100];
char *
nametochar (char *name)
{
struct hostent *host;
char **p, *ip;
host = gethostbyname (name);
p = host->h_addr_list;
ip = inet_ntop (AF_INET, *p, addr, 100);
return ip;
}
int
main (int argc, char *argv[])
{
printf ("%sn", nametochar (argv[1]));
return 0;
}
|