动态字符串 (ds)
动态字符串库,提供自动扩容的字符串操作,包括追加、插入、删除、查找、替换、分割等。
数据结构
struct ds_t {
char * data; /* 以 '\0' 结尾的字符串数据 */
size_t length; /* 字符串长度(不含 '\0') */
size_t capacity; /* 当前容量 */
};
API
分配与释放
struct ds_t * ds_alloc(void);
分配空字符串,初始容量 16。
struct ds_t * ds_alloc_from_str(const char * str);
从 C 字符串创建,复制内容。
struct ds_t * ds_alloc_from_buf(const void * buf, int len);
从指定缓冲区创建,复制 len 字节内容,并自动追加 '\0' 结尾。buf 为 NULL 或 len <= 0 时返回空串。
void ds_free(struct ds_t * ds);
释放字符串及结构体。
访问器
size_t ds_length(struct ds_t * ds); /* 字符串长度 */
size_t ds_capacity(struct ds_t * ds); /* 当前容量 */
int ds_isempty(struct ds_t * ds); /* 是否为空,空返回 1 */
const char * ds_cstr(struct ds_t * ds); /* C 字符串指针,NULL 安全,返回 "" */
复制与子串
struct ds_t * ds_clone(struct ds_t * ds);
深拷贝,返回新的 ds_t。
struct ds_t * ds_substr(struct ds_t * ds, size_t start, size_t len);
取子串,返回新的 ds_t。start 超出长度时返回空串,len 超出范围时自动截断。