【发布时间】:2014-11-16 19:55:47
【问题描述】:
考虑这段代码:
void foo(void* obj) {
NodePtr node = malloc(sizeof(Node));
char* word = (char*)obj;
node->data= malloc(sizeof(char) * (strlen(word)+1));
*((char*)(node->data)) = *(word); //assumed to be the problem
printf(": %s\n", (node->data));
printf(": %s\n", word);
}
我基本上想要做的是将 node 结构的 void 指针属性(data)设置为字符串值。
由于某种原因,第一次打印出来的时候是垃圾,而第二次打印出来的效果很好。 我认为尝试将我的节点的 data 属性的值设置为 word 的值是有问题的,该行由注释指示。我尝试将 word 类型转换为 char 指针,但这没有帮助。我也尝试将 (word) 替换为 obj 的 char* 类型转换。
需要注意的一点是,“胡言乱语”实际上是它应该是的第一个字母(例如:如果打印出 word 打印出苹果,那么另一个打印语句给出a 第一次,然后在以后的函数调用中,它会类似于 a^q。
我打印了 strlen(word) 以确保我分配了正确的空间量,这似乎验证了。
【问题讨论】:
标签: c void-pointers