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



如果我有如下函数:

 bool MyFunc(char **outMessage)
 {
 }

这里的期望是什么?调用者会分配一个缓冲区,然后传递给被调用者吗?但是,如果被调用者超出了缓冲区,该怎么办?

要明确的是,你没有大小,或者任何其他论点,这就是函数的定义。你会怎么看?

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

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

我有一个函数(…)-你从哪里得到的?它是在某种框架中吗?还是在项目中?

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

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

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

作为最后的手段,做一个假设。我想你需要设置*outMessage,也就是说,函数被调用为:

char * msg = NULL;
MyFunc(&msg); // You set it
printf("%s", msg);

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

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

确保您的申报意见清楚地表明了这一事实。

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

最新更新