将字符串复制到 char**
copy string to char**
我不明白为什么会出现下面的代码:
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* 数组。
它想要 char* 类型的东西,而 &ret 是 char*** 类型。
你可以传递它 *ret ,它是 char* 类型。
使用
strcpy(*ret, temp);
而不是
strcpy(&ret, temp);
您需要取消引用 char ** 而不是引用它。
ret
是 char**
但 strcpy
期望 char*
然后您获取 &ret
的地址使其成为 char***
要么将 ret
作为 char*
传递给 receive_message
,要么在传递给 strcpy (*ret, temp)
时取消引用它
您正在传递 strcpy
指向指向 char
的指针的地址...这 2 级间接寻址太多了。您不需要所有这些间接寻址,您可以这样简化 receive_message
:
char *receive_message(char *ret) {
return strcpy(ret, "text");
}
不值得一个单独的函数;-)
将指针的地址传递给 receive_function
是很有用的,如果你打算让这个函数修改调用范围内的指针,如果你需要重新分配缓冲区,那么这是必需的,但是因为你没有传递大小,这样的重新分配是危险的。
我不明白为什么会出现下面的代码:
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* 数组。
它想要 char* 类型的东西,而 &ret 是 char*** 类型。
你可以传递它 *ret ,它是 char* 类型。
使用
strcpy(*ret, temp);
而不是
strcpy(&ret, temp);
您需要取消引用 char ** 而不是引用它。
ret
是 char**
但 strcpy
期望 char*
然后您获取 &ret
的地址使其成为 char***
要么将 ret
作为 char*
传递给 receive_message
,要么在传递给 strcpy (*ret, temp)
您正在传递 strcpy
指向指向 char
的指针的地址...这 2 级间接寻址太多了。您不需要所有这些间接寻址,您可以这样简化 receive_message
:
char *receive_message(char *ret) {
return strcpy(ret, "text");
}
不值得一个单独的函数;-)
将指针的地址传递给 receive_function
是很有用的,如果你打算让这个函数修改调用范围内的指针,如果你需要重新分配缓冲区,那么这是必需的,但是因为你没有传递大小,这样的重新分配是危险的。