C++ - char** 作为函数参数传入,它应该是调用者分配的还是被调用者?
C++ - char** passed in as function argument, should it be caller allocated or callee?
如果我有如下函数:
bool MyFunc(char **outMessage)
{
}
这里的期望是什么?调用者会分配一个缓冲区,并传递给被调用者吗?但是如果被调用者溢出缓冲区怎么办?
要清楚你没有大小,或任何其他参数,这是函数定义。你会怎么看?
还是我写错了?这是一个被调用者分配的缓冲区?但是如果它是一个被调用者分配的缓冲区,我该如何处理缓冲区呢?注意:库没有提供处理这个的函数。
编辑:这是真实场景,取自此处 --> http://llvm.org/docs/doxygen/html/Analysis_2Analysis_8cpp_source.html#l00078
如果没有大小参数,那么我希望 MyFunc
负责分配缓冲区。否则它不知道缓冲区有多大!
确保您的声明注释清楚地表明这一事实。
但也请注意,这不是一个很好的做事方式。它可能会在 1852 年以 C 语言运行,但我们已经从那里开始了。为什么不通过引用或其他方式接受 std::string
?
我有一个函数 (...) - 你从哪里拿来的?它在某个框架中吗?还是在一个项目中?
在这种情况下,您需要参考文档。
如果出于任何原因没有文档,请尝试找到作者(如果他在您的公司/项目中)并询问。
如果出于任何原因无法访问作者,请参阅源代码 - 查找此功能的用法。它在哪里使用?其他人如何使用它?
作为最后的手段,做一个假设。我猜你需要设置*outMessage
,即函数是这样调用的:
char * msg = NULL;
MyFunc(&msg); // You set it
printf("%s", msg);
无论如何,这对 C++ 不利。
如果我有如下函数:
bool MyFunc(char **outMessage)
{
}
这里的期望是什么?调用者会分配一个缓冲区,并传递给被调用者吗?但是如果被调用者溢出缓冲区怎么办?
要清楚你没有大小,或任何其他参数,这是函数定义。你会怎么看?
还是我写错了?这是一个被调用者分配的缓冲区?但是如果它是一个被调用者分配的缓冲区,我该如何处理缓冲区呢?注意:库没有提供处理这个的函数。
编辑:这是真实场景,取自此处 --> http://llvm.org/docs/doxygen/html/Analysis_2Analysis_8cpp_source.html#l00078
如果没有大小参数,那么我希望 MyFunc
负责分配缓冲区。否则它不知道缓冲区有多大!
确保您的声明注释清楚地表明这一事实。
但也请注意,这不是一个很好的做事方式。它可能会在 1852 年以 C 语言运行,但我们已经从那里开始了。为什么不通过引用或其他方式接受 std::string
?
我有一个函数 (...) - 你从哪里拿来的?它在某个框架中吗?还是在一个项目中?
在这种情况下,您需要参考文档。
如果出于任何原因没有文档,请尝试找到作者(如果他在您的公司/项目中)并询问。
如果出于任何原因无法访问作者,请参阅源代码 - 查找此功能的用法。它在哪里使用?其他人如何使用它?
作为最后的手段,做一个假设。我猜你需要设置*outMessage
,即函数是这样调用的:
char * msg = NULL;
MyFunc(&msg); // You set it
printf("%s", msg);
无论如何,这对 C++ 不利。