我不明白为什么以下代码:
char** receive_message(char** ret)
{
char* temp = "text";
strcpy(&ret, temp);
return ret;
}
给出了这个错误:
warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [enabled by default]
strcpy(&ret, temp);
我正在尝试将函数内部生成的消息复制到在函数外部分配的char *数组。
答案 0 :(得分:2)
使用
strcpy(*ret, temp);
而不是
strcpy(&ret, temp);
你需要尊重char **而不是参考它。
答案 1 :(得分:1)
它需要char *类型的东西,而& ret的类型为char ***。
你可以传递* ret,类型为char *。
答案 2 :(得分:0)
ret
是char**
但strcpy
需要char*
然后,您将&ret
的地址设为char***
将ret
作为char*
传递到receive_message
或将其传递给strcpy (*ret, temp)
答案 3 :(得分:0)
您正在将strcpy
指针的地址传递给指向char
的指针......这两个间接级别太多了。您不需要所有这些间接,您可以这样简化receive_message
:
char *receive_message(char *ret) {
return strcpy(ret, "text");
}
不值得一个单独的功能; - )
将指针的地址传递给receive_function
是有用的,你打算让这个函数修改调用范围内的指针,如果你需要重新分配缓冲区就需要,但是你做的就是没有超过规模,这种重新分配将是危险的。