【发布时间】:2011-12-15 08:22:13
【问题描述】:
我正在 C 中实现 CMap,其中一部分需要将信息存储在我手动管理其内存的链表类型的结构中。所以这个struct的前4个字节是指向下一个struct的指针,下一段是字符串(键),最后一段是值。
说void *e = ptr 定义了一个这样的链表。
然后,ptr + 4 指的是字符串部分的开头。
我想将该字符串值分配给另一个字符串,到目前为止我所做的是:
char *string = (char *)ptr + 4;
但是,我认为这是不对的。
【问题讨论】:
-
为什么不能强制转换为结构,然后使用
->操作符访问字段? -
怎么知道字符串的长度?它以零字节终止?你到底想做什么?您是否要复制字符串?或者只是访问它?如果它是一个以零结尾的 C 风格字符串,而您只想访问它的值,
char *string=(char *)ptr + 4;就可以了。 (虽然sizeof(void *)会比 4 好——代码最终可能需要在 LP64 平台上运行。)
标签: c string struct void-pointers