0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用C語言實現(xiàn)動態(tài)擴容的string

Wildesbeast ? 來源:網絡整理 ? 作者:佚名 ? 2020-10-25 10:59 ? 次閱讀

眾所周知,C++ 中的string使用比較方便,關于C++ 中的string源碼實現(xiàn)可以看我的這篇文章:源碼分析C++的string的實現(xiàn)

最近工作中使用C語言,但又苦于沒有高效的字符串實現(xiàn),字符串的拼接和裁剪都比較麻煩,而且每個字符串都需要申請內存,內存的申請和釋放也很容易出bug,怎么高效的實現(xiàn)一個不需要處理內存問題并且可以動態(tài)擴容進行拼接和裁剪的string呢?

一個好的string應該有以下功能?

創(chuàng)建字符串

刪除字符串

尾部追加字符串

頭部插入字符串

從尾部刪除N個字符

從頭部刪除N個字符

裁剪字符串

獲取字符串長度

獲取完整字符串

下面來看看各個功能的實現(xiàn):

首先定義一個string的句柄,相當于C++中的實例

struct c_string;typedef struct c_string c_string_t;

在內部string的實現(xiàn)如下:

// string的初始內存大小static const size_t c_string_min_size = 32;struct c_string { char *str; // 字符串指針 size_t alloced; // 已分配的內存大小 size_t len; // 字符串的實際長度};

創(chuàng)建字符串:

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 = ‘