眾所周知,C++ 中的string使用比較方便,關于C++ 中的string源碼實現可以看我的這篇文章:源碼分析C++的string的實現
最近工作中使用C語言,但又苦于沒有高效的字符串實現,字符串的拼接和裁剪都比較麻煩,而且每個字符串都需要申請內存,內存的申請和釋放也很容易出bug,怎么高效的實現一個不需要處理內存問題并且可以動態擴容進行拼接和裁剪的string呢?
一個好的string應該有以下功能?
創建字符串
刪除字符串
尾部追加字符串
頭部插入字符串
從尾部刪除N個字符
從頭部刪除N個字符
裁剪字符串
獲取字符串長度
獲取完整字符串
下面來看看各個功能的實現:
首先定義一個string的句柄,相當于C++中的實例
struct c_string;typedef struct c_string c_string_t;
在內部string的實現如下:
// string的初始內存大小static const size_t c_string_min_size = 32;struct c_string { char *str; // 字符串指針 size_t alloced; // 已分配的內存大小 size_t len; // 字符串的實際長度};
創建字符串:
c_string_t *c_string_create(void) { c_string_t *cs; cs = calloc(1, sizeof(*cs)); cs-》str = malloc(c_string_min_size); *cs-》str = ‘ 十六浦百家乐的玩法技巧和规则 | 百家乐注册18元体验金| 木星百家乐的玩法技巧和规则| 北碚区| 百家乐路单免费下载| 唐山市| 大发888娱乐真钱游戏| 真人百家乐开户优惠| 百家乐官网视频台球游戏| 时时博百家乐的玩法技巧和规则| 阴宅风水24山分房| 至尊百家乐官网facebook| 垫江县| 大发888官网充值| 职业百家乐官网的玩法技巧和规则 | 百家乐官网群到shozo网| bet365高尔夫娱乐场| 百家乐规律和方法| 网上百家乐官方网站| 大世界百家乐官网赌场娱乐网规则| 88娱乐城怎么样| 太阳城线上娱乐城| 百家乐变牌器批发| 百家乐官网7scs娱乐场| 大发888娱乐城客户端下载| 网上百家乐骗钱| 百家乐真人娱乐城| 百博百家乐官网的玩法技巧和规则| 澳门百家乐官网限红规则| 百家乐官网2珠路投注法| 百家乐官网公式分析| 大发888官网www.dafa888.com| sz新全讯网网址112| 带有百家乐官网的棋牌游戏有哪些| 海王星娱乐网| 百家乐官网压分技巧| 真人百家乐官网出千| 百家乐官网在发牌技巧| 带百家乐官网的时时彩平台| E乐博百家乐官网娱乐城| 百家乐官网大赢家小说|