C ++ - char **作为函数参数传入,它应该是调用者分配还是被调用者?

时间:2015-02-13 10:00:05

标签: c++ pointers

如果我有以下功能:

 bool MyFunc(char **outMessage)
 {
 }

这里有什么期望?调用者是否会分配缓冲区并传递给被调用方?但那么如果被调用者超过缓冲区呢?

要明确你没有大小或任何其他参数,这是函数定义。你怎么看?

或者我错了吗?它是被调用者分配的缓冲区吗?但如果它是被调用者分配的缓冲区,我该如何处理缓冲区呢?注意:没有功能可以处理库提供的功能。

编辑:这是一个真实的场景,取自此处 - > http://llvm.org/docs/doxygen/html/Analysis_2Analysis_8cpp_source.html#l00078

2 个答案:

答案 0 :(得分:5)

我有一个功能(...) - 你从哪里拿走它?它在某种框架中吗?或者在项目中?

在这种情况下,您需要参考文档。

如果出于任何原因,没有文档,请尝试找到作者(如果他在您的公司/项目中)并询问。

如果出于任何原因,作者无法访问,请参阅源代码 - 查找此函数的用法。在哪里使用?其他人如何使用它?

作为最后的手段,做出一个假设。我猜你需要设置*outMessage,即函数被调用为:

char * msg = NULL;
MyFunc(&msg); // You set it

printf("%s", msg);

无论如何,这对C ++来说是不好的。

答案 1 :(得分:0)

如果没有大小参数,那么我希望MyFunc负责分配缓冲区。否则,它不会知道缓冲区有多大!

确保您的声明评论清楚地表明了这一事实。

但也请注意,这不是一种非常好的做事方式。它可能会在1852年在C中飞行,但我们已经开始了。为什么不通过引用或其他方式接受std::string