您现在的位置是:首页 >技术教程 >轻量级C通用库Klib解读 —— kstring网站首页技术教程

轻量级C通用库Klib解读 —— kstring

浅浅280 2026-02-18 12:01:04
简介轻量级C通用库Klib解读 —— kstring

前言

Klib是一个独立的轻量级c通用库,里面大多数组件除了C标准库外不包含外部库,想用对应组件直接拷贝对应文件即可使用。
该库致力于高效和较小的内存占用,其中部分组件(如khashkbtreeksortkvec),无论是内存还是速度方面,都是所有编程语言中相似算法或数据结构最高效的实现之一。

kstring

源代码在这里

数据结构主体

非常简单的一个封装数据结构

typedef struct __kstring_t {
	size_t l, m;
	char *s;
} kstring_t;
  • l:长度(不包含末尾
  • m:容量
  • s:存储string内容

这个结构实在是太简单了,你想怎么操作都可以任意拿捏
所以其他程序或模块用这个结构基本是把这个定义拷贝过去后,在代码中直接操作成员
这里就只是介绍些类似c++的STL里的string的一些API吧

常用操作

  • kputc:末尾添加一个字符c,返回该字符,出错返回EOF(-1)
    int kputc(int c, kstring_t *s)
    
  • kputskputsn:末尾添加字符串p,返回插入的字符串p长度,出错返回EOF(-1)
    int kputs(const char *p, kstring_t *s)
    int kputsn(const char *p, int l, kstring_t *s)
    
  • kputwkputuwkputl:把数字c转成字符串存起来,返回0,出错返回EOF(-1)
    int kputw(int c, kstring_t *s)
    int kputuw(unsigned c, kstring_t *s)
    int kputl(long c, kstring_t *s)
    

分割:ksplitkstrtok

  • ksplit:分割字符串,一次性返回结果
    入参n:存储sdelimiter分成几部分
    返回值offerts:数组,每个元素记录被分割的字串的起始位置
    注1:这个函数可能会更改s内容,谨慎使用
    注2:返回值offsets是申请出来的,记得释放free
    static inline int *ksplit(kstring_t *s, int delimiter, int *n)
    {
    	int max = 0, *offsets = 0;
    	*n = ksplit_core(s->s, delimiter, &max, &offsets);
    	return offsets;
    }
    
  • kstrtok:类似strtok_r,但是str不会改变,并且strsep都可以为空
    char *kstrtok(const char *str, const char *sep, ks_tokaux_t *aux)
    

输出:ksprintf

类似sprintf,往s里按模式fmt写数据

int ksprintf(kstring_t *s, const char *fmt, ...)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。