gpt4 book ai didi

C API : why are functions using returnParameters with buffer + size instead of returning char*

转载 作者:行者123 更新时间:2023-11-30 15:05:18 26 4
gpt4 key购买 nike

我使用 C 语言的次数不多,但当我使用 C 语言时,我注意到许多 API 使用带缓冲区的返回参数及其最大大小,而不是返回指向所请求缓冲区的指针。为什么会这样,更重要的是 - 我是否必须对我仅私有(private)使用的每个功能执行此操作?

采取:

int crazy_c_getSomeText(char* buf, int len);

此时:

char* crazy_c_getSomeText();

更加简洁,并且作用相同,不是吗?

嗯,你没有第一个函数返回的int,这可能是一个错误代码。这是唯一的原因还是我正在监督一些与内存管理相关的事情?

更新:感谢您的快速回复!我发现还有更多我没有考虑的事情:可访问性和分配的不确定性。但是如果这些函数不是一些库函数而是一些本地帮助程序怎么办?然后我就可以确定内存是可访问的并且我知道内存是如何保存的。

最佳答案

是的;我认为您正在监督一些与内存管理相关的事情。

根据我的想法,考虑到我使用 .NET P/Invoke 的经验,我可以说,如果我尝试使用 C API(如后者在 C# 中的签名),我很可能会崩溃应用程序,即“字符串”将在我的 .NET 应用程序可能无法访问的内存位置中创建;任何访问返回值的尝试都会导致问题。我想很多场景都是这样。

我认为假设 API 的客户端可以访问与 API 本身相同的内存部分并不是一个好的做法。

此外,在没有自动内存回收的环境中(如 C 中的情况),每个实体都应该在自身之后进行“清理”。 char*crazy_c_lib_getSomeText(); 不会有这样的选项。

关于C API : why are functions using returnParameters with buffer + size instead of returning char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com