我有一个第三方库,它的功能如下:
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