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不需要动态分配缓冲区。
我有一个 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不需要动态分配缓冲区。