日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容的string

Wildesbeast ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-10-25 10:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

一個(gè)好的string應(yīng)該有以下功能?

創(chuàng)建字符串

刪除字符串

尾部追加字符串

頭部插入字符串

從尾部刪除N個(gè)字符

從頭部刪除N個(gè)字符

裁剪字符串

獲取字符串長(zhǎng)度

獲取完整字符串

下面來(lái)看看各個(gè)功能的實(shí)現(xiàn):

首先定義一個(gè)string的句柄,相當(dāng)于C++中的實(shí)例

struct c_string;typedef struct c_string c_string_t;

在內(nèi)部string的實(shí)現(xiàn)如下:

// string的初始內(nèi)存大小static const size_t c_string_min_size = 32;struct c_string { char *str; // 字符串指針 size_t alloced; // 已分配的內(nèi)存大小 size_t len; // 字符串的實(shí)際長(zhǎng)度};

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

诸暨市| 大新县| 墨玉县| 普陀区| 友谊县| 通榆县| 木兰县| 炉霍县| 南安市| 甘泉县| 冷水江市| 中方县| 于都县| 达尔| 松江区| 洪江市| 德州市| 库尔勒市| 都江堰市| 尼勒克县| 奉节县| 宣威市| 巴东县| 鸡西市| 永宁县| 富裕县| 武义县| 平阳县| 芜湖县| 瓦房店市| 饶河县| 成安县| 星座| 阳西县| 富平县| 德保县| 桓台县| 湟中县| 桦川县| 攀枝花市| 海兴县|