c api 期望 char* 内存 (malloc) 以及如何避免此 malloc。代码重构

c api expects char* memory (malloc) and how to avoid this malloc. Code refactoring

我有一个 c 库 API 需要类似于下面的内容, (我正在对旧的 C++ 代码进行重构)

some c++ program.cpp which uses that clibrary:

char *getname = (char*)malloc(20);
getMeName(20, getname); //the c api
cout<<getname; //some operations wit the red data
free(getname);

C API声明:

int getMeName(int maxNumberCharacters, char *array);

这个C的测试例子API和上面的代码类似

如何避免此处的 malloc() 以及最干净的方法是什么。

c api expects char* malloc and how to avoid malloc

如果 API 需要 malloc,那么您可以通过不使用那个 API 来避免 malloc。例如,您可以设计和实施新的 API.

设计良好的 C API 很少对内存的来源抱有期望。尽管这样的 API 可以与 malloc 一起使用,但这并不意味着您必须在 C++ 上使用 malloc。 API 的文档应该提到是否需要 malloc。函数声明不足以确定这一点。

如果 API 只需要指向任何可写内存的指针,那么您可以像 API 是用纯 C++ 编写的那样使用它。我建议使用适合用例的任何内存。

假设你想直接在栈上分配字符串缓冲区,你可以使用:

char getname[20];
getMeName(20, getname);
cout<<getname;

在这种情况下,内存将在堆栈上分配,标识符 getname 将是指向内容的指针。

我假设 API getMeName 将在字符串末尾的元素 19 处或元素 19 之前包含一个 Null 终止符 '[=13=]'。这还假设 API不需要动态分配缓冲区。