结构体问题

peter115 2003-08-19 12:44:20
我现在想在网络上利用socket传输一个结构体
例如:
struct student
{
char *name;
int age;
float score;
};
当我把结构体中的name改为传递数组的时候就可以传输都没有问题,
但是我如果将它改为上面说的指针就不行,我的拷贝是利用
首先定义一个发送缓冲区char buf[100];
strust student p;
然后调用memcpy(buf,p,sizeof(struct student));
在客户端接收的时候总是结构体中的另外两项都可以接收到,就是name一项为空,
当我把指针改为数组就可以,我不知为什么,请高手赐教!
...全文
42 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2003-08-23
  • 打赏
  • 举报
回复
概念问题!接受到了你如果直接用指针没有把指针指象你收到的单元一样没有用!
sevecol 2003-08-19
  • 打赏
  • 举报
回复
memcpy(buf,p,sizeof(struct student));
你这样得到的size没有包括name,只有一个指针而已,所以不行.

你需要将name的数据也拷贝到buf里面,然后设置struct内的指针.
sharkhuang 2003-08-19
  • 打赏
  • 举报
回复
概念问题!指针本身没有空间的!你如果不给他分配的话!所以必须先分配再copy!
而你的name【100】有100个char的空间!首地址是name
widewave 2003-08-19
  • 打赏
  • 举报
回复
使用数组吧,省事。
jack_wq 2003-08-19
  • 打赏
  • 举报
回复
char *name;是指针,进行sizeof操作求得的字节数是指针所占的字节而不是指针所指内容所占的字节,所以得到的字节数并不包含name的内容!
Wolf0403 2003-08-19
  • 打赏
  • 举报
回复
sizeof(student) 你就会发现你 copy 进去的结构不包含整个名字了。同意楼上的
peter115 2003-08-19
  • 打赏
  • 举报
回复
我现在的问题是我已经分配了空间,而且已经利用strcpy将一个字符串拷贝了还是没有收到的,我打印发送的数据缓冲区是已经拷贝了,但是接收还是没有,请哪位将代码教我!
pengzhenwanli 2003-08-19
  • 打赏
  • 举报
回复
同意楼上。
你的name拷贝的是个指针。并没有内容。
应该分开拷贝。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧