qq_41870875 2021-05-07 03:06 采纳率: 76.9%
浏览 163
已采纳

c语言结构体成员是指针时 怎样去使用结构体?

如题
结构体
typedef struct{
int id;
char name[8];
char *cc;
}record;

//初始化结构体分配内存
record * test=(record *)malloc(sizeof(record)*1);
//下面需要初始化 结构体成员 指针cc吗?
//初始化成员 cc 分配内存
(*(test) ).cc =(char *)malloc(sizeof(char)*20);
//结构体成员赋值
(*(test) ).id = 11;
strcpy((*(test)).name,"abc");
strcpy((*(test)).cc,"test");
//这里成员cc 已经赋值  并且打印成员值正常
//printf("%s\n",(*(test)).cc);  

我的疑问是 ,这个cc成员单独使用是没有问题的,
在使用结构体的时候是不正常 ,
例如:将结构体写入到文件 
write(fd,test,sizeof(record1)*1);
//写入后去看文件 其他的值都是正常 ,  而结构体成员cc那个位置的数据是 乱码
//写入后的二进制文件内容
/* 0B 00 00 00 61 62 63 00  00 00 00 00 00 00 00 00  C0 A2 2C 01 00 00 00 00  00 00 00 00 00 00 00 00 */
//0B 是结构体成员id的值11,  结构体成员name的值是 61 62 63 即abc,
//成员cc  这里的值 不对 而且每运行一次程序 对应位置的数据是变化的
//回到c程序 用结构体去读这个文件   结果也是读不出数据 
//其他值正常 , 指针成员cc  %p打印显示是 指针 %s没有显示 空的, sizeof 显示8大小

//现在的疑问是  结构体里 成员是指针时    这个结构体要怎样用呢? 结构体成员指针有什么作用和功能?
//自学c语言 刚接触结构体 ,这里不太明白  希望大神们讲解下 .谢谢
 

 

展开全部

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2021-05-07 03:11
    关注

    你这个结构体由于有指针,所以用sizeof是不能够得到指针指向空间的大小的,自然也没有办法将指针指向空间数据写入文件。所以这个结构体你需要单独写一个GetSize函数,写文件的时候,指针指向的空间数据要单独写文件,直接write(fd,test,sizeof(record1)*1);是不行的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥20 simulink实现滑模控制和pid控制对比,提现前者优势
  • ¥30 开发一款闲置物资借用管理软件
  • ¥15 (有偿)1500/怎么让网络延迟网速不变/需要做成软件/
  • ¥15 空调变频器板怎么测试可靠性和性能
  • ¥15 uniapp开发:微信小程序使用drawImage绘制第二次时不生效?
  • ¥500 tdx winner 函数计算公式,需和官方一样,1000元
  • ¥15 word 样式管理树状设计
  • ¥15 中国json地图的点击事件
  • ¥15 前端是实现管道重叠效果
  • ¥15 WIN10批处理删除指定该文件夹下的所有文件和文件夹bat