免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3483 | 回复: 7
打印 上一主题 下一主题

gethostbyname() 函数! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-12 17:28 |只看该作者 |倒序浏览
在网上看到一篇文章讲的是gethostbyname用法
其中举了一例代码如下
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>

int main(int argv, char *argc[])
{
    struct hostnet *h;
    if(argv != 2)
    {
        printf(stderr,"usage :getip addresss\n");
        exit(1);
    }
    if((h=gethostbyname(argc[1]))== NULL)
    {
        herror("gethostbyname");
        exit(1);
    }
    printf("host name :%s\n",h->h_name);
    printf("IP address :%s\n",inet_ntoa(*(struct in_addr*)h->h_addr));
    return 0;
}
不知道参数校验中的这句if(argv != 2)有什么意义,为啥是跟2比?
还有我把这段代码放gcc编译后显示2个错误
test_gethostbyname.c:22 dereferencing pointer  to incomplet type
test_gethostbyname.c:23 dereferencing pointer  to incomplet type
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

论坛徽章:
0
2 [报告]
发表于 2009-02-12 18:07 |只看该作者
呵呵,你这个程序哪里看来的
还是你输入错误啊
一堆错误

论坛徽章:
0
3 [报告]
发表于 2009-02-12 18:08 |只看该作者
原帖由 samewhere 于 2009-2-12 17:28 发表
在网上看到一篇文章讲的是gethostbyname用法
其中举了一例代码如下
#include
#include
#include
#include
#include
#include

int main(int argv, char *argc[])
{
    struct hostnet *h;
  ...

main 函数的参数,这是基础啊,不过一般习惯是int main(int argc, char **argv)
argc 就是指命令行参数的个数,包括程序名本身也算一个

论坛徽章:
0
4 [报告]
发表于 2009-02-12 18:18 |只看该作者
不知道参数校验中的这句if(argv != 2)有什么意义,为啥是跟2比?

说明你的程序运行的时候要带一个参数,在这里是你你想获得host信息的hostnmae

还有我把这段代码放gcc编译后显示2个错误
test_gethostbyname.c:22 dereferencing pointer  to incomplet type
test_gethostbyname.c:23 dereferencing pointer  to incomplet type

struct hostnet 是什么类型啊,写错了吧
hostent吧

论坛徽章:
0
5 [报告]
发表于 2009-02-12 18:20 |只看该作者
argc, argv 好像也都写反了

楼主的这么多输入错误都检查不出来
需要好好学习一下c语言基础知识 :)

论坛徽章:
0
6 [报告]
发表于 2009-02-12 20:23 |只看该作者
LZ啊,仔细点看看你的程序吧

int argv, char *argc[], 你写反了,argc是参数个数,argv才是对应的指针数组啊。

argc判断是否为2,是因为这个程序在设计的时候就设计成1个参数了。所以需要判断。

论坛徽章:
0
7 [报告]
发表于 2009-02-13 15:37 |只看该作者
原帖由 samon_fu 于 2009-2-12 20:23 发表
LZ啊,仔细点看看你的程序吧

int argv, char *argc[], 你写反了,argc是参数个数,argv才是对应的指针数组啊。

argc判断是否为2,是因为这个程序在设计的时候就设计成1个参数了。所以需要判断。

你说到刀刃上了,谢谢,我是做系统的,所以编码能力很差。。。惭愧了!

论坛徽章:
0
8 [报告]
发表于 2009-02-13 15:46 |只看该作者
原帖由 zhuhefang2006 于 2009-2-12 18:18 发表
不知道参数校验中的这句if(argv != 2)有什么意义,为啥是跟2比?

说明你的程序运行的时候要带一个参数,在这里是你你想获得host信息的hostnmae

还有我把这段代码放gcc编译后显示2个错误
test_gethostbyn ...

确实是hostent这结构写错了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP