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
我有一个函数(…)-你从哪里得到的?它是在某种框架中吗?还是在项目中?
在这种情况下,您需要参考文档。
如果由于任何原因,没有文档,请尝试找到作者(如果他在您的公司/项目中)并询问。
如果由于任何原因,作者无法访问,请参阅源代码-查找此函数的用法。它在哪里使用?其他人如何使用它?
作为最后的手段,做一个假设。我想你需要设置*outMessage
,也就是说,函数被调用为:
char * msg = NULL;
MyFunc(&msg); // You set it
printf("%s", msg);
无论如何,这对C++来说是不好的。
如果没有大小参数,那么我希望MyFunc
负责分配缓冲区。否则它不会知道缓冲区有多大!
确保您的申报意见清楚地表明了这一事实。
但也要注意,这不是一个很好的做事方式。它可能在1852年在C飞行,但我们已经离开了它。为什么不通过引用或其他方式接受std::string
?
相关文章:
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 调用方如何知道 VARIANT 中何时有十进制?
- 从返回 std::optional of std::vector 的函数中获取结果到调用方
- "co_yield"是否可以在恢复协程时从调用方返回值?
- 如何使用从处理程序调度的最终回调将响应异步返回给调用方on_read?
- 通过 C++ 中的指针将子对象值传递给被调用方类
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 为什么调用移动分配?
- 具有不同类型的可选参数的调用方函数
- C++ - 从移动分配运算符调用复制分配
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- CPP 异常获取抛出调用方的详细信息
- 识别 capnproto RPC 中的调用方
- 如何防止方法的调用方将结果存储在C++中
- 被调用方如何知道参数是通过寄存器而不是堆栈传递的
- 谷歌测试有没有办法为被调用函数中的断言生成调用方行号
- C++-char**作为函数参数传入,应该是调用方分配的还是被调用方
- 在调用方堆栈上分配内存