问一个有关getaddrinfo的问题

genius1wjc 2010-12-19 12:33:03

程序的目的是找到gets输入的主机 并打印主机名和ip ,程序通过编译运行。
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <sys/stat.h>
#include <signal.h>
#include <time.h>


int main(void){
int rc;
char name[20]; //得到的主机名
char ipbuf[16]; // 保存ip地址
struct addrinfo hints,*addr;
memset(&hints,0,sizeof(struct addrinfo));
hints.ai_family=AF_INET;
hints.ai_flags=AI_CANONNAME | AI_ADDRCONFIG;

gets(name); //从输入得要查找的主机名
if((rc=getaddrinfo(name,NULL,&hints,&addr))==0){
do{
printf("ip: %s,host: %s\n",inet_ntop(AF_INET,addr->ai_addr,ipbuf,sizeof(ipbuf)),addr->ai_canonname);
}while((addr=addr->ai_next)!=NULL); //打印找到的主机地址和主机名
return 0;
}
printf("%d\n",rc);//检查出错时的rc值
return 0;
}


程序的问题是 不管输入的主机是非存在 都无法找到主机 返回2.0.0.0 的ip和空主机名

是不是inet_ntop用错了?请高手指点。
...全文
220 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
genius1wjc 2010-12-20
  • 打赏
  • 举报
回复
没有人知道吗?
genius1wjc 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luciferisnotsatan 的回复:]

错误码是什么?
[/Quote]

genius1wjc@ubuntu:~$ gcc egdrgtf.c -o egdrgtf.o
/tmp/cco7gid0.o: In function `main':
egdrgtf.c:(.text+0x4a): warning: the `gets' function is dangerous and should not be used.
genius1wjc@ubuntu:~$ ./egdrgtf.o
www.baidu.com
ip: 2.0.0.0,host: www.baidu.com
ip: 2.0.0.0,host: (null)
ip: 2.0.0.0,host: (null)
ip: 2.0.0.0,host: (null)
ip: 2.0.0.0,host: (null)
ip: 2.0.0.0,host: (null)
luciferisnotsatan 2010-12-19
  • 打赏
  • 举报
回复
错误码是什么?
newfinder 2010-12-19
  • 打赏
  • 举报
回复
好多头文件啊.呵呵……
linux下的我不太清楚.搞清楚那几个函数就好了.
windows下有GetAdaptersInfo,gethostbyname,HOSTENT结构体等可以完成这个任务.

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧