我希望开发一个使用ANSI C语言的库。
我有一个字符串结构体:
我希望编写一个名为
以下哪种方法更适合设计
我有一个字符串结构体:
string
。struct libme_string
{
char* buffer;
int length;
};
我希望编写一个名为
libme_create_string()
的函数,用于创建和初始化一个字符串(类似于C++中的构造函数)。以下哪种方法更适合设计
libme_create_string()
?
方法一
在libme_create_string()
中为字符串对象分配内存并返回:
struct libme_string* libme_create_string(int length)
{
// Check arguments...
// Allocate memory for object.
struct libme_string* str = malloc(sizeof(struct libme_string));
// Handle memory allocation errors...
str->buffer = malloc(length);
str->length = length;
// Handle memory allocation errors...
return str;
}
void libme_delete_string(struct libme_string* str)
{
// Check arguments...
free(str->buffer);
free(str);
}
使用
struct libme_string* str;
str = libme_create_string(1024);
// ...
libme_delete_string(str);
str = NULL;
方法二
在libme_create_string()
函数中不要为字符串对象分配内存,而是将其作为参数接受:
struct void libme_create_string(libme_string* str, int length)
{
// Check arguments...
// Just allocate memory for members.
str->buffer = malloc(length);
str->length = length;
// Handle memory allocation errors...
}
void libme_delete_string(struct libme_string* str)
{
// Check arguments...
free(str->buffer);
}
使用
struct libme_string str; // << different, not a pointer!
libme_create_string(&str, 1024);
// ...
libme_delete_string(&str);
注意事项
string
仅为示例。- 方法 #2 更快,是吗?
最后,有没有关于编写C库的良好设计指南?