免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 17210 | 回复: 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
21 [报告]
发表于 2007-08-02 16:56 |只看该作者

论坛徽章:
0
20 [报告]
发表于 2007-08-02 09:00 |只看该作者
我也是刚接触,放暑假刚好有时间就开始学的。呵呵

论坛徽章:
0
19 [报告]
发表于 2007-08-01 23:03 |只看该作者
原帖由 Wendsia 于 2007-8-1 20:22 发表
都不好意思说了,我把hostent
后面的t写漏了,呵呵呵呵
你搞这个多久了呀?



哦.呵呵.我也没仔细看你那个定义,原来是那儿写错了.
我也没搞多久. 真正差不多是从去年底开始才深入接触Linux的.

论坛徽章:
0
18 [报告]
发表于 2007-08-01 20:22 |只看该作者
都不好意思说了,我把hostent
后面的t写漏了,呵呵呵呵
你搞这个多久了呀?

论坛徽章:
0
17 [报告]
发表于 2007-08-01 20:17 |只看该作者
是什么错误?
嗯.是的,我还是学生.

论坛徽章:
0
16 [报告]
发表于 2007-08-01 19:59 |只看该作者
好了,我发现错误了,呵呵,解决了
蛮感谢你的还是!问一下是学生吗?

论坛徽章:
0
15 [报告]
发表于 2007-08-01 19:52 |只看该作者
$ gcc -Wall -o taller taller.c
taller.c: 在函数 ‘main’ 中:
taller.c:25: 警告:从不兼容的指针类型赋值
taller.c:37: 错误:提领指向不完全类型的指针
我照着你的上面那个把它改了,报告还是那个错误,是不是那个语句写得有问题呢
算了吧,还是谢谢你了

论坛徽章:
0
14 [报告]
发表于 2007-08-01 18:57 |只看该作者
原帖由 Wendsia 于 2007-8-1 16:14 发表
报告什么也没有变,编译还是那个样子的


哦,那我就不清楚了.
不过我一般按照下面这种写法就不会有问题.


  1.       struct hostent *server;
  2.       struct sockaddr_in pin;   
  3.       if ((server = gethostbyname(argv[1])) == 0)
  4.         {
  5.                 perror("gethostbyname error\n");
  6.                 exit(1);
  7.         }

  8.         memset(&pin, 0, sizeof(pin));
  9.         pin.sin_family = AF_INET;
  10.         pin.sin_addr.s_addr = ((struct in_addr*)(server->h_addr))->s_addr;
  11.         pin.sin_port = htons(12345);
复制代码


或者你再好好检查一下其它什么地方吧.

论坛徽章:
0
13 [报告]
发表于 2007-08-01 16:14 |只看该作者
报告什么也没有变,编译还是那个样子的
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP