【问题标题】:void pointers into a string not outputting properly in Cvoid 指向在 C 中未正确输出的字符串的指针
【发布时间】: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


    【解决方案1】:

    node->data= malloc( strlen( word ) + 1 );
    strcpy( (char*)node->data, word );
    

    而不是

    node->data= malloc(sizeof(char) * (strlen(word)+1));
    *((char*)(node->data)) = *(word); 
    

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 2011-04-12
      • 1970-01-01
      • 2021-06-28
      • 2013-02-16
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多