免费注册 查看新帖 |

Chinaunix

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

提领指向不完全类型的指针 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-31 16:16 |只看该作者 |倒序浏览
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<netinet/in.h>
#include<errno.h>
#include<string.h>
#include<sys/wait.h>
#define MYPORT 5000
int main(int argc,char *argv[])
{
int sockfd;
struct sockaddr_in their_addr;
struct hosten *he;
int numbytes;
if(argc!=3)
{
fprintf(stderr,"usage :talker hostname message\n";
exit(1);
}
if((he=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname";
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror("socket";
exit(1);
}
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(MYPORT);
their_addr.sin_addr=((struct in_addr*)he->h_addr);
bzero(&(their_addr.sin_zero),;
if((numbytes=sendto(sockfd,argv[2],strlen(argv[2]),0,(struct sockaddr*)&their_addr,sizeof(struct sockaddr)))==-1)
{
perror("sendto";
exit(1);
}
printf("send %d bytes to %s\n",numbytes,inet_ntoa(their_addr.sin_addr));
close(sockfd);
return 0;
}
编译的时候:
taller.c: 在函数 ‘main’ 中:
taller.c:23: 警告:从不兼容的指针类型赋值
taller.c:35: 错误:提领指向不完全类型的指针
taller.c:42: 警告:隐式声明函数 ‘inet_ntoa’
taller.c:42: 警告:格式 ‘%s’ 需要类型 ‘char *’,但实参 3 的类型为 ‘int’
出现的那个错误应该怎么解决呀?麻烦大家帮忙一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-07-31 16:25 |只看该作者

  1. bzero(&their_addr, sizeof(their_addr));
复制代码

or

  1. memset(&their_addr, 0, sizeof(their_addr));
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-08-01 09:20 |只看该作者
不是那一行出错,是上面一行:
their_addr.sin_addr=((struct in_addr*)he->h_addr);
可不可以顺便解释一下这条语句的意思啊?不懂

论坛徽章:
0
4 [报告]
发表于 2007-08-01 09:47 |只看该作者
呵呵,我行数数错了.

  1. their_addr.sin_addr=*((struct in_addr*)(he->h_addr));
复制代码

或者是

  1. their_addr.sin_addr.s_addr=((struct in_addr*)(he->h_addr))->s_addr;
复制代码


  1. struct hostent {
  2.        char    *h_name;
  3.        char    **h_aliases;
  4.        int     h_addrtype;
  5.        int     h_length;
  6.        char    **h_addr_list;
  7. };
  8. #define h_addr h_addr_list[0]
复制代码

h_addr也是一个指针类型.所以说前面要加一个*号去取里面的内容,将其赋给前面的值.

论坛徽章:
0
5 [报告]
发表于 2007-08-01 10:32 |只看该作者
不行噢,改了都没用,编译的时候还是会出错,老是那一个错误。
有空再帮我看一下,研究一下啊,谢谢啦!呵呵

论坛徽章:
0
6 [报告]
发表于 2007-08-01 11:01 |只看该作者
怎么只有我看不懂题目呀? 那位指教一下什么是“提领指向不完全类型的指针”?

论坛徽章:
0
7 [报告]
发表于 2007-08-01 11:04 |只看该作者
原帖由 Wendsia 于 2007-8-1 10:32 发表
不行噢,改了都没用,编译的时候还是会出错,老是那一个错误。
有空再帮我看一下,研究一下啊,谢谢啦!呵呵


应该没有错误吧, 都是这样写的.
你好像少包括了一个头文件吧.
#include<arpa/inet.h>

论坛徽章:
0
8 [报告]
发表于 2007-08-01 11:20 |只看该作者
加了那个头文件后警告少了,但是还是那个错误啊,不知道怎么回事了。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2007-08-01 11:21 |只看该作者
原帖由 tom_xx_hu@yahoo 于 2007-8-1 11:01 发表
怎么只有我看不懂题目呀? 那位指教一下什么是“提领指向不完全类型的指针”?

这块的“提领”指的应该是 dereference.

论坛徽章:
0
10 [报告]
发表于 2007-08-01 11:24 |只看该作者
怎么只有我看不懂题目呀? 那位指教一下什么是“提领指向不完全类型的指针”?那个是gcc编译时的给出的错误,我也不知道是什么东东啦,不知道什么错误
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP