C语言中字符串相关操作函数

2023-05-16

长度

strlen

size_t strlen(const char *str)

功能:返回字符串长度

strnlen

size_t strnlen(const char *str, size_t maxlen)

功能:返回字符串长度,如果长度大于maxlen,返回maxlen

设置

memset

void *memset(void *s, int c, size_t count)

功能:将s指向的地址,连续count,设置为c。(注意步进为sizeof(char)

拼接

strcat

char *strcat(char *dest, const char *src)

功能:将源字符串拼接到目标字符串后面

strncat

char *strncat(char *dest, const char *src, size_t count)

功能:将源字符串拼接到目标字符串后面,指定最多拷贝长度

strlcat

char *strlcat(char *dest, const char *src, size_t count)

功能:将源字符串拼接到目标字符串后面,指定目标缓冲区总大小为count

函数实现:

size_t strlcat(char *dest, const char *src, size_t count)
{
	size_t dsize = strlen(dest);
	size_t len = strlen(src);
	size_t res = dsize + len;

	/* This would be a bug */
	BUG_ON(dsize >= count);

	dest += dsize;
	count -= dsize;
	if (len >= count)
		len = count-1;
	memcpy(dest, src, len);
	dest[len] = 0;
	return res;
}

比较

strncasecmp

int strncasecmp(const char *s1, const char *s2, size_t len)

功能:不区分大小写、限制长度的字符串比较

strcasecmp

int strcasecmp(const char *s1, const char *s2)

功能:不区分大小写的字符串比较

strcmp

int strcmp(const char *cs, const char *ct)

功能:比较两个字符串

strncmp

int strncmp(const char *cs, const char *ct, size_t count)

功能:比较指定长度的两个字符串

memcmp

__visible int memcmp(const void *cs, const void *ct, size_t count)

功能:比较指定长度的两片内存区域内容是否相等

bcmp–>memcmp

# define __visible __attribute__((__externally_visible__))

拷贝

strcpy

char *strcpy(char *dest, const char *src)

功能:将源字符串拷贝到目的地址,空字符结束

可能存在目标地址内存空间小,内存访问越界

strcpy

char *strncpy(char *dest, const char *src, size_t count)

功能:将源字符串拷贝到目的地址,空字符或者拷够count个字符结束

不会主动在拷贝完加尾0

memcpy

void *memcpy(void *dest, const void *src, size_t count)

功能:从源空间拷贝count大小的目标空间

memmove

void *memmove(void *dest, const void *src, size_t count)

功能:从源空间拷贝count大小的目标空间

与memcpy()不同,memmove()可以处理重叠区域

在实现中如果dest<src,则正向copy,否则从后向前copy,防止有重叠区

strlcpy

size_t strlcpy(char *dest, const char *src, size_t size)

功能:将一个字符串拷贝到目标缓冲区

在缓冲区大小size不为0时进行拷贝,最多拷贝size-1个字符,最后添加一个尾\0,

stpcpy

char *stpcpy(char *__restrict__ dest, const char *__restrict__ src)

功能:字符串拷贝

区别于strcpy在返回值上,stpcpy返回目标字符串的末尾地址。

strdup

char *strdup(const char *str)

功能:将传入字符串,拷贝一份返回

注意:返回的地址是在函数内部有malloc的,使用完记着free

函数实现位置:source/tools/include/nolibc/string.h

static __attribute__((unused))
char *strndup(const char *str, size_t maxlen)
{
	size_t len;
	char *ret;

	len = strnlen(str, maxlen);
	ret = malloc(len + 1);
	if (__builtin_expect(ret != NULL, 1)) {
		memcpy(ret, str, len);
		ret[len] = '\0';
	}

	return ret;
}

strndup

char *strndup(const char *str, size_t maxlen)

strdup一样,不过多指定了一个最大长度

查找

strchr

char *strchr(const char *s, int c)

功能:在给定字符串查找是否存在字符c,存在则返回首次出现的位置,不存在返回NULL

strnchr

char *strrchr(const char *s, size_t count, int c)

功能:在给定字符串查找是否存在字符c,存在则返回第一次出现的位置,不存在返回NULL,限制查找次数count

strchrnul

char *strchrnul(const char *s, int c)

功能:在给定字符串查找是否存在字符c,存在则返回第一次出现的位置,不存在返回s结尾的位置。

strrchr

char *strrchr(const char *s, int c)

功能:在给定字符串查找是否存在字符c,存在则返回最后一次出现的位置,不存在返回NULL

memchr

void *memchr(const void *s, int c, size_t n)

功能:在给定内存空间查找是否存在字符c,存在则返回首次出现的位置,不存在返回NULL

strstr

char *strstr(const char *s1, const char *s2)

功能:在s1中查找s2,找到返回在s1中的位置,否则返回NULL

函数实现:

char *strstr(const char *s1, const char *s2)
{
	size_t l1, l2;

	l2 = strlen(s2);
	if (!l2)
		return (char *)s1;
	l1 = strlen(s1);
	while (l1 >= l2) {
		l1--;
		if (!memcmp(s1, s2, l2))
			return (char *)s1;
		s1++;
	}
	return NULL;
}

strnstr

char *strnstr(const char *s1, const char *s2, size_t len)

功能:在s1中查找s2指定找len个长度,找到返回在s1中的位置,否则返回NULL

strspn

size_t strspn(const char *s, const char *accept)

功能:该函数返回 s中第一个不在字符串accept中出现的字符下标(初始段匹配长度 )。

函数实现:

size_t strspn(const char *s, const char *accept)
{
	const char *p;

	for (p = s; *p != '\0'; ++p) {
		if (!strchr(accept, *p))
			break;
	}
	return p - s;
}

strcspn

size_t strcspn(const char *s, const char *reject)

功能:该函数返回 s中第一个在字符串reject中出现的字符下标(初始段不匹配长度 )。

函数实现:

size_t strcspn(const char *s, const char *reject)
{
	const char *p;

	for (p = s; *p != '\0'; ++p) {
		if (strchr(reject, *p))
			break;
	}
	return p - s;
}

strpbrk

char *strpbrk(const char *cs, const char *ct)

功能:查找在字符串cs中首次出现ct中任一字符的位置

函数实现:

char *strpbrk(const char *cs, const char *ct)
{
	const char *sc1, *sc2;

	for (sc1 = cs; *sc1 != '\0'; ++sc1) {
		for (sc2 = ct; *sc2 != '\0'; ++sc2) {
			if (*sc1 == *sc2)
				return (char *)sc1;
		}
	}
	return NULL;
}

分割

char *strsep(char **s, const char *ct)

函数功能:s为要分解的字符串,delim为分隔符字符串。

函数实现:

char *strsep(char **s, const char *ct)
{
	char *sbegin = *s;
	char *end;

	if (sbegin == NULL)
		return NULL;

	end = strpbrk(sbegin, ct);
	if (end)
		*end++ = '\0';
	*s = end;
	return sbegin;
}

strtok

char *strtok( char *str, const char *delim)

char *strtok( char *restrict str, const char *restrict delim );(C99开始)

功能:返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针

注意:此函数是破坏性的:它写入’\0’字符到字符串str的元素

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中字符串相关操作函数 的相关文章

  • SpringMVC请求静态资源异常

    问题描述 xff1a 使用 REST 风格的资源URL时 xff0c SpringMVC请求静态资源 图片 js等 发生异常 优雅的 REST 风格的资源URL 不希望带 html 或 do 等后缀 若将 DispatcherServlet
  • web项目异常A web application registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister

    异常 xff1a A web application registered the JBDC driver com mysql jdbc Driver but failed to unregister it when the web app
  • Python(Web服务)全链路日志个跟踪

    1 背景 在我们的实际项目中 xff0c 尤其以Web服务为例 xff0c 经常遇到要做日志跟踪的场景 我们经常采用的方式是 xff0c 生成一个trace id 在全链路的调用中都输出这个id进行跟踪 这里需要处理的几个问题是 xff1a
  • @Controller和@RestController的区别?

    64 Controller和 64 RestController的区别 xff1f 官方文档 xff1a 64 RestController is a stereotype annotation that combines 64 Respo
  • get方式传值中文乱码

    如下情况 xff1a lt a id 61 span class hljs string 34 bookname 34 span title 61 span class hljs string 34 span class hljs vari
  • 记我的2016年实习总结

    实习问题记录及经验总结 工具篇 git 问题描述 xff1a 第一次merge分支到主干develop xff0c 遇到冲突时解决方法不当造成主干代码无法运行 原因 xff1a xff08 1 xff09 自己习惯问题 xff0c 写完代码
  • Maven搭建的SSM项目中遇到的问题

    Maven搭建的SSM项目中遇到的问题 1 EL表达式失效 2 装配异常Unable to configure ssm 解决办法 其实这两个问题的出现都是因为servlet版本和java版本不合适造成的 xff0c EL表达式在servle
  • Java小工具Lombok的安装与使用

    1 Lombok简介 Lombok是一个代码生成器 xff0c 可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具 xff0c 通过使用对应的注解 xff0c 可以在编译源码的时候生成对应的方法 使用 lom
  • 日常记录(1)

    数据库连接池Druid Alibaba github地址 xff1a https github com alibaba druidBlog xff1a http blog csdn net pk490525 article details
  • NOA上车「清一色」自主品牌,哪些供应商正在突围前线

    随着入门级L2进入普及周期 xff0c 以NOA xff08 高速 城区 xff09 为代表的L2 43 L2 43 43 赛道 xff0c 正在成为主机厂 硬件供应商 算法及软件方案商的下一波市场制高点的争夺阵地 高工智能汽车研究院监测数
  • 【STM32-初始化的时候是如何通过结构体给寄存器赋值的?】

    使用的是正点原子的源码 xff0c 一直没有搞明白初始化的时候是怎么给相关的寄存器赋值的 xff0c 今天琢磨了一下 xff1a 首先 xff0c 创建了一个GPIO InitTypeDef类型的结构体变量GPIO InitStructur
  • 多元建模基础(二):正态混合分布

    1 正态方差混合模型 xff1a 1 xff09 定义 xff1a 称 显然 xff0c xff0c 混合分布中 xff0c 由W的分布确定一组权值 xff0c 混合变量W可以被解释为来自新信息并影响所有风险因子波动性的扰动 位置向量和分散
  • 神经RRT*:基于学习的最优路径规划 翻译+总结

    摘要 xff1a 快速随机探索树 xff08 RRT xff09 及其变体由于能够快速有效地探索状态空间而非常流行 然而 xff0c 它们对初始解很敏感 xff0c 收敛到最优解的速度很慢 xff0c 这意味着它们需要消耗大量内存和时间来找
  • 解决 Windows has triggered a breakpoint in Linkage.exe问题

    这两天在做一个小项目 xff0c 里面有多线程的东东 xff0c 在调试的时候 总是遇到 Windows has triggered a breakpoint in Linkage exe 的错误 现在将这个问题和大家分享一下 前提是这样的
  • 写一个简单的爬虫,可直接复制学习!!

    简单爬虫直面代码 xff0c 可直接复制学习 这个代码的作用主要是用来获取到百度首页的数据 xff0c 只用来供理解学习 真 小白 福利 todo 首先导包requests 用于爬取数据 import requests todo 定义你要爬
  • Dataloader类

    Dataset让我们可以知道数据在什么位置 xff0c 及数据的的索引对应的数据 Dataloader相当于加载器 xff0c 把数据加载到神经网络中 import torchvision 测试数据集 xff0c train设置为false
  • 如何把截图固定在电脑页面上

    如果我们给人讲网课课 xff0c 或者汇报的时候想把公式 xff0c 定理 xff0c 图片等放在醒目位置做对比 那么我们可能需要把截图放在别的文件的页面上 xff0c 那么我们要怎么做呢 xff1f 方法一 xff1a 利用QQ截图功能
  • 如何写好一个算法

    写出算法有一个比较通用的方法论 xff0c 步骤如下 xff1a 1 理解问题 先弄清楚具体要解决什么问题 做成怎样的程度就可以满足问题需要 xff1f 是需要精确值还是近似值 xff1f 2 分析问题 用数学思路去描述问题的求解过程 3
  • python如何读取txt里面的数据

    当我们在用python时可能会遇到想要把txt文档里的数据读取出来然后进行绘图 xff0c 那么我们要怎么才能够将txt里的数据读取出来呢 xff1f 假设有txt文本如下 xff1a 想要把上述文本数据读取出来 xff0c 可以用以下方法

随机推荐

  • MATLAB读取数据(txt|excel)并绘图

    最近做了实验 xff0c 要绘图进行比较 xff0c 网上百度搜索搞了很久 xff0c 终于搞定了 写个文章记录一下 废话不多讲 xff0c 咱们步入正题 以下是以txt文档为例进行的绘图 xff0c 如果用excel更加简单 道理都是一样
  • 如何用电脑自带的软件录屏

    有时候想要用电脑录屏 xff0c 但是电脑又没有录屏软件 xff0c 那我们有没有办法进行录屏呢 xff1f 可以借助 游戏 设置进行录屏哦 xff01 本人电脑 xff1a win10系统 1 点击桌面左下角windows图标 xff0c
  • 如何设置电脑锁屏后程序仍在运行

    最近在跑代码的时候 xff0c 回去午睡后过来打开电脑发现程序没跑 发现电脑锁屏后程序不再运行了 xff0c 重新将电脑设置锁屏后仍运行 xff0c 如下 xff1a 1 同时按下win 43 R 打开 运行 界面 2 输入control
  • Latex文献引用显示?解决

    最近在写论文的时候 xff0c 发现执行latex时应该显示的文献号变成 xff1f 号了 按照网上的多种方法还没解决好 解决文献引用问题主要有以下方法 xff1a 1 end document 的语句位置问题 执行文件之所以没有找到bib
  • 有些参考文献找不到页码和期号怎么解决?

    在我们撰写论文时不论是查找下载期刊文献资料还是编辑参考文献都会需要知道该期刊论文的期卷号 xff0c 那么 xff0c 期刊论文的期卷号怎么找呢 xff1f 下面小编就介绍几种论文期卷号的查找方法 xff08 注 xff1a 文中所用的检索
  • CUDA入门(一)

    最近我也都在看CUDA xff0c 自己看书和练习也都搞了一个月了 而且经常在CSDN上逛 xff0c 也发现了很多问题 xff0c 所以决定自己写点这方面的东西 xff0c 方便自己也方便后来人 根据我的调查 xff0c 我发现现在的初学
  • 如何在excel多条件筛选

    最近在报名各种考试 xff0c 发现表格里的职位一大堆 xff0c 条件也一大堆 一个个找找的头都大了 经过多方查找和同学 xff08 CC xff09 的帮助 xff0c 终于成功学会了怎么多条件筛选 浅浅记录一下 xff1a 比如在一张
  • MTLAB读取数据并计算平均值

    当想从matlab里面读取excel表格的某一列进行计算时 xff0c 可以进行如下操作 1 读取excle表格里的数据 xff0c 具体操作见文章MATLAB读取数据 xff08 txt excel 并绘图 matlab读取数据并绘图 沉
  • word表格如何令文字上下居中

    第一步 xff1a 在word文档中插入需要的表格 xff0c 如图所示 第二步 xff1a 如下图所示 xff0c 单击红色圆圈标记的图标 xff0c 表格被全部选中 xff0c 如图所示 第三步 xff1a 在表格中 xff0c 单击鼠
  • 键盘打字时,打一个字后面少一个字如何解决

    键盘敲字时 xff0c 如果光标在中间 xff0c 输入一个字后面就少一个字 文字输入的例子 只需要按INS 键就可以恢复正常了 注 xff1a 如果是手提笔记本电脑 xff0c 一个键盘有两下两行 xff0c 先按一下FN 按键 xff0
  • 教你如何开发VR游戏系列教程五:UI 交互

    原文链接 xff1a 欢迎关注AR学院 上一篇介绍了ugui NGUI 以及普通3D模型的UI设计 这一讲主要介绍怎么样利用这些UI做交互 大家在VR游戏看到的UI以及UI交互 xff0c 主要有哪几种 xff1f 1 头控悬停 xff08
  • 顶会论文集--ICRA2020

    转自 https blog csdn net spacegene article details 107458141 utm medium 61 distribute pc relevant none task blog title 3 a
  • 机器人学习--Gazebo学习--sdf文件、urdf和xacro文件

    供学习使用 xff1a 参考 xff1a https blog csdn net lxlong89940101 article details 93486875 utm medium 61 distribute pc relevant no
  • 多传感器数据融合简介(转)

    转自知乎网友 xff1a 多传感器融合 xff08 算法 xff09 综述 知乎 多传感器融合 xff08 Multi sensor Fusion MSF xff09 是利用计算机技术 xff0c 将来自多传感器或多源的信息和数据以一定的准
  • 动态SLAM

    动态SLAM快速入门 xff08 原理介绍及经典算法 xff09 https mp weixin qq com s biz 61 MzU1NjEwMTY0Mw 61 61 amp mid 61 2247520976 amp idx 61 1
  • 经典编程问题(13)汉诺塔

    背景 汉诺塔 xff0c 又称河内塔 hanoi xff0c 源于印度古老的传说 该传说中要求在三个柱子间移动金质的圆盘 xff0c 规则是 xff1a 每次只能移动一个盘子大盘子不能放在小盘子的上方开始的时候 xff0c 在某根柱子上有
  • 2011年终总结——思路

    By Alpha G wu 又是一年的尽头 xff0c 对于本人来说 xff0c 不是老了一岁 xff0c 而是又长大了一岁 每一天的自己都是一个fresh的自己 xff0c 更别说一年的变化有多大 xff0c 大到甚至连你自己都察觉不出来
  • win10下完美安装ubuntu使用docker容器

    期待以久的windows 10支持ubuntu版本更新终于发布了 xff0c 怀着期待的心情 xff0c 下载更新到2004版本 xff08 设置 gt 关于中查看 xff09 如果版本较低 xff0c 可以使用win10更新包提示 xff
  • 学习ing

    分治算法 一 基本概念 在计算机科学中 xff0c 分治法是一种很重要的算法 字面上的解释是 分而治之 xff0c 就是把一个复杂的问题分成两个或更多的相同或相似的子问题 xff0c 再把子问题分成更小的子问题 直到最后子问题可以简单的直接
  • C语言中字符串相关操作函数

    长度 strlen size t strlen const char str 功能 xff1a 返回字符串长度 strnlen size t strnlen const char str size t maxlen 功能 xff1a 返回字