首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求教C++中struct结构体的有关问题,多谢

2012-02-19 
求教C++中struct结构体的问题,谢谢。自己最近在学习《深度探索C++对象模型》一书,学习到struct部分遇到些疑惑

求教C++中struct结构体的问题,谢谢。
自己最近在学习《深度探索C++对象模型》一书,学习到struct部分遇到些疑惑:
  书中说:例如,把单一元素的数组放在一个struct的尾端,于是每个struct objects可以拥有可变大小的数组。
 

C/C++ code
    struct mumble    {      //stuff      char pc[1];    };    

  //从档案或标准输入装置中取得一个字符串,然后为struct本身和该字符串配置足够的内存
  struct mumble *pmumbl=(struct mumble*)malloc(sizeof(struct(mumble)))+strlen(string)+1;
  strcpy(pmumbl->pc,string);

  书中这段话,到底想表达什么意思?我反反复复看了几遍,始终没明白,它想表达什么?
  请高手指点,谢谢。

[解决办法]
google柔性数组。
[解决办法]
这个没什么了,这个只是适合动态分配“合适”空间
struct mumble *pmumbl=(struct mumble*)malloc(sizeof(struct(mumble)))+strlen(string)+1;
strcpy(pmumbl->pc,string);

这个结构体是以一个字符(字节)为单位分配的,一个string的字串有假设有m个字符,则需要m+1个字节内存来存储(第m+1个字节用来存储结束符标识 ‘\0')

关于strcpy,第一个操作数是一个char*的指针,它指向string内容要被复制倒何处,细想一下
这个:
char p[]="12345\0";
strcpy(p,"1234");
又有什么分别呢?只不过注意strcpy的时候要确保第一个指针所关联的空间单元要>第二个字串长度,否则出现安全问题(显然这个时候p关联的空间是12345\0\0 7个字节,下面字面值字串1234是四个字节,所以足够存储,是安全的

struct mumble *pmumbl=(struct mumble*)malloc(sizeof(struct(mumble)))+strlen(string)+1strcpy(pmumbl->pc,string);

这个结构体进行分配,恰好是“多一个”的关系,采用分配最适合的存储空间来存放一个随机的string字串
[解决办法]
struct mumble *pmumbl=(struct mumble*)malloc(sizeof(struct(mumble)))+strlen(string)+1;

应该是malloc(sizeof(numble) + strlen(string) + 1)吧。。

热点排行