qq_41870875
qq_41870875
2021-05-07 11:06
采纳率: 100%
浏览 50

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条回答 默认 最新

  • happyparrot
    快乐鹦鹉 2021-05-07 11:11
    已采纳

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

    点赞 评论
  • it_xiangqiang
    C和C++技术博客 2021-05-07 11:55

    希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
    希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html

    点赞 评论

相关推荐