读书人

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

发布时间: 2012-02-19 19:43:39 作者: rapoo

求教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)吧。。

读书人网 >C++

热点推荐