我并没有那么多地使用C,但是当我这样做时,我注意到许多API都在使用带有缓冲区的返回参数,并且返回值是最大大小,而不是返回指向所请求缓冲区的指针。为什么会这样,更重要的是-我是否必须为我仅私下使用的每个功能都这样做?
拿:
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();
不会有这样的选择。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句