qq_41870875 2021-05-07 11: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 11:11
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。