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

标签 c++ pointers

如果我有如下函数:

 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++ 不利。

关于C++ - char** 作为函数参数传入,它应该是调用者分配的还是被调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28496909/

相关文章:

c++ - C++中 vector 的叉积

c# - 将#defines 从.h 文件移植到C# 应用程序的最佳做法是什么?

c - 双星号和 C 中的 `malloc`

c++ - 自定义内存分配器 : T* pointer, operator new 与 void pointer cast

c - 与程序堆栈执行相关的链表程序流程

c++ - 在 C++ 中用于用户输入的二维数组

c++ - 为什么我的 OpenSSL C++ 代码会创建二进制加密输出?

c++ - 多线程和标准输出的性能问题

c++ - 如何从 Qt 中的布局中删除小部件

c++ - C++编译器在多重继承的情况下如何处理成员变量内存偏移?