LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2430|回复: 3

编译时出现 invalid type argument of ‘unary *’

[复制链接]
发表于 2007-1-26 11:56:19 | 显示全部楼层 |阅读模式
下面是我照着书上敲的一个程序,运行时,传递一个保存机器名的字符串(如"www.sohu.com")给gethostbyname(),然后从返的数据结构struct hostent中收集信息,并输出.

#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>

int main(int argc,char* argv[]){
    struct hostent *h;
    char** aliases,addes;
    char str[30];
    if(argc!=2){
        printf("incorrect parameter number\n");
        exit(1);
     }
    if((h=gethostbyname(argv[1]))==NULL){
        printf("incorrect exit");
        exit(1);
     }
    printf("Host name:%s\n",h->h_name);
    for(aliases=h->h_aliases;*aliases!=NULL;aliases++)
        printf("Aliase name:%s\n",*aliases);   
           
    addes=h->h_addr_list;
    for(;*addes!=NULL;addes++)
        printf("IP Address:%s\n",inet_ntoa(*((struct in_addr*)   (*addes))));
            
    exit(0);   
}

编译时如下:
[root@localhost ~]# gcc -o test test.c
test.c: 在函数 ‘main’ 中:
test.c:24: 警告:赋值时将指针赋给整数,未作类型转换
test.c:25: 错误:invalid type argument of ‘unary *’
test.c:26: 错误:invalid type argument of ‘unary *’

请问是什么原因啊?多谢了
发表于 2007-1-26 12:56:41 | 显示全部楼层
<quote>char** aliases,addes;</quote>
这行写错了吧, addes不是指针,而是个char变量
奇怪为什么不用inet_aton(const char *cp, struct in_addr *inp)函数呢?
回复 支持 反对

使用道具 举报

发表于 2007-1-26 12:57:40 | 显示全部楼层
char** aliases,addes;

这行写错了吧, addes不是指针,而是个char变量
改成
char** aliases, **addes


改完后后运行结果:
[kevin@kevin Codes]$ gcc test.c
[kevin@kevin Codes]$ ./a.out www.google.com
Host name:www-china.l.google.com
Aliase names:www.google.com
Aliase names:www.l.google.com
IP Addresss:66.249.89.99

奇怪为什么不用inet_aton(const char *cp, struct in_addr *inp)函数呢?
直接可以处理主机名的问题
inet_pton()可以处理IP问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-26 22:43:59 | 显示全部楼层
多谢指教,哎,我怎么愣是没看出来!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表