【发布时间】:2012-12-16 17:07:15
【问题描述】:
我有一个第三方库,函数声明如下:
void foo(const void* input, char output[1024]);
如果我这样写:
char* input = "Hello";
char output[1024];
foo(input, output); // OK
但我不想在堆栈上声明这么大的数组(这在 OS 内核环境中会非常危险)。所以我必须这样做:
char* input = "Hello";
char* output_buf = new char[1024];
foo(input, output_buf); // Compiler Error C2664
我无法更改 foo 的实现。我该怎么办?
==================
问题已解决。我的真实代码是这样的:
char* input = "Hello";
void* output_buf = new char[1024];
foo(input, output_buf); // Compiler Error C2664
标准不隐式接受从 void* 到 char* 的转换。所以下面的代码有效:
char* input = "Hello";
void* output_buf = new char[1024];
foo(input, (char*)output_buf); // OK
【问题讨论】:
-
输入的声明呢?
-
输入与此问题无关。所以我省略了。
-
@xmllmx:我认为你错了。您假设输入与您的问题无关,因为您不了解
output实际上是如何传递给foo的。然而,output几乎肯定是问题所在。 -
顺便问一下,@xmllmx,full 错误消息是什么(参数号、类型),
char是真实代码使用的实际类型吗? -
@xmllmx: 另外,请记住字符串文字的类型为
const char *,而不仅仅是char *(有一个已弃用的隐式转换,但它通常只会给您带来不必要的麻烦)。
标签: c++ c arrays argument-passing function-declaration