socket 结构体一些问题

今天遇到了socket传送结构体的问题。于是网上搜刮了一些idea。但是在具体编程中还是遇见了一些问题,在此记录一下。

我的结构体是这样的:

typedef struct info

{

             int index;

             int tag;

             int len;

             char *content;

}

在客户端和服务器端都知道这个结构体。于是代码如下:

客户端:

info data;
memset(&data,'\0',sizeof(data));
data.index = 1;
data.tag = 2;
data.len = 2;
data.content = "hahhakekekll";
if(send(sockfd,&data,sizeof(info),0) < 0)
printf("send error");
服务器端:

if((recv(sockfd,buf,MAXLINE,0)) < 0)
printf("recv error");
else
{
info data;
memset(&data,0,sizeof(data));
memcpy(&data,buf,sizeof(info));
printf("%d\n%d\n%d\n%s\n",data.index,data.tag,data.len,data.content);
}
运行程序,编译没有问题,但是运行的时候,客户端发送数据,发现data.content是乱码,其他的数据比如tag,index,len都是正确的。我开始以为是我在最后没有添加‘\0’的缘故。于是在info结构体添加了一项,就是content的长度。

typedef struct info

{

             int index;

             int tag;

             int len;

             int leng;

             char *content;

}

然后在

if((recv(sockfd,buf,MAXLINE,0)) < 0)
printf("recv error");
else
{
info data;
memset(&data,0,sizeof(data));
memcpy(&data,buf,sizeof(info));
data.content[leng] = '\0';
 printf("%d\n%d\n%d\n%s\n",data.index,data.tag,data.len,data.content);
}
发现还是错的,段错误。输出strlen(data.content)发现远大于我实际的数据。估计是这样的,数据毕竟在流上传输,以二进制。然后'\0'可能就遇到了。我也不知道具体什么原因。难道是我末尾没有定好位?但是我在末尾加了'\0'。难道这还不算吗?

反正char*content就是行不通。网上看了一些资料,发现都用的数组。于是将char *content 改成 char content[MAXLINE];

这样,

strcpy(data.content,"hahhgakdiwoi");

这样,能够运行了。传入数据没有问题。content能够正确显示。

我很疑惑了。为什么char * 出错了呢?char []与char *有很大区别吗?还是我哪里的细节没有做好?

小菜鸟不懂。

一次记录。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值