C/C++字符函数和字符串函数详解————长度受限制的字符串函数

C++不定长输入【string类型格式化输入到数组】 函数原型:std::istream& getline(std::istream& is, std::string& str, char delim);std::string & str : 传入参数,存储读取到的一行文本的字符串,也就是被分割出去的那个字符串。另外第一个参数要求char *类型,上面使用了string中的c_str()方法,将string类型转为char *类型。参数说明:std::istream & is : 输入流对象,可以是。这里是将输入的字符串作为stringstream的输入。 阅读详情

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.前言        

2.长度受限制的字符串函数

2.1strncpy函数

2.2strncat函数

2.3strncmp函数

2.4小结

3.特殊的字符串函数

3.1strstr函数

3.2strtok函数


1.前言        

        在上一篇文章中我们讲过了长度不受限制的字符串函数,包括strlen函数,strcmp函数,strcpy函数,strcat函数,学过和没学过的老铁们可以点击长度不受限制的字符串函数

今天我们我们就讲讲长度受限制的字符串函数,包括strncpy函数,strncat函数,strncmp函数,在这些函数中长度受限制是需要我们加上要修改的字节数。还有一些特殊的函数包括strstr函数,strtok函数。今天就来看看我们的内容吧。

2.长度受限制的字符串函数

2.1strncpy函数

我们进入cplusplus函数可以看到strnpcy函数的参数。

        strncpy函数的返回类型是char*,他的参数是 char * destination, const char * source, size_t num,在这里对于source由于不需要进行修改,只是需要进行拷贝,所以加上const,对于size_num是需要将source字符串的num个字节进行拷贝到destination,在第一个字节处进行修改,详细的代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[] = "abcdefghigh";
	char brr[] = "zzzzz";
	strncpy(arr, brr, 4);
	printf("%s", arr);
	return 0;
}

 我们运行查看

我们发现字符串arr的前4个字节修改为字符串的前4个字节。

2.2strncat函数

同样我们进入cplusplus函数查看它的参数。

        strncat函数的返回值是char*,它的参数是 char * destination, const char * source, size_t num

和函数strncpy函数,由于source函数不需要进行修改,所以用const函数进行修改,在size_t num是需要连接的字符的个数,详细的代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[100] = "abcdefghigh";
	char brr[] = "xzzzzz";
	strncat(arr, brr, 4);
	printf("%s", arr);
	return 0;
}

我们运行代码可以看到:

在这里我么的字符串brr是source,把他的前4个字符连接到字符串arr后面,同时拷贝一下‘\0’;

2.3strncmp函数

我们进入cplusplus网站

        我们可以看到strncmp的参数是const char * str1, const char * str2, size_t num,由于str1和str2不需要进行修改,只需要进行比较,所以用const进行修饰,size_t是需要比较的字符串的个数。对于strncmp函数的返回值是int类型,

         如果第一个大于第二个返回大于0的数据,如果第一个小于第二个返回小于0的数据,如果第一个等于第二个则返回0,注意这里的比较是对于前num个字符进行比较,比较的形式和前面的额strcmp一样,具体的代码演示如下:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[] = "abcdefghigh";
	char brr[] = "abce";
	int ret=strncmp(arr, brr, 4);
	printf("%d", ret);
	return 0;
}

我们运行可以看到:

函数的返回值是-1。

2.4小结

        对于这三个函数,他们和长度不受限制的类似,只是多了一个限制条件,这个限制条件是限制的source.也就是说num是几个就拷贝几个,里面的循环由遇到‘\0’的while循环,改为了for循环,判定是i<num。

3.特殊的字符串函数

3.1strstr函数

        strstr函数是一个查找子串的函数,它返回最早出现字串的位置,我们进入cplusplus网站进行查看,

        我们看第一条,它参数和返回值都用const进行修饰,事实上他们两条都一样,只是第一条用const进行修饰,让它的值不能改变,更加的安全,防止非法的修改。我们举个例子来感受一直strstr函数的应用,代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
	char arr[] = "abcabcdefghigh";
	char brr[] = "abcd";
	char *crr=strstr(arr, brr);
	printf("%s", crr);
	return 0;
}

我们运行可以看到:

我们想要模拟实现,首先画一下它的思路:

        就是由str2和str1进行记录位置,s1和s2进行比较,不相等str1和s1进行移动,相等str1和str2不动,s1和s2进行移动,相等移动,不相同重新指向str1和str2 ,依次循环,直到str1遇到‘\0’,模拟实现如下:

#include <stdio.h>
char* my_strstr(char* arr, char* brr)
{
	char* str1 = arr, * s1 = arr, * str2 = brr, * s2 = brr;
	while (*str1)
	{
		if (*s2 == '\0')
		{
			return str1;
		}
		if (*s1 == *s2)
		{
			s1++;
			s2++;
		}
		else
		{
			str1++;
			s1 = str1;
			s2 = str2;
		}
	}
}
int main()
{
	char arr[] = "abcabcdef";
	char brr[] = "abcd";
	char* p = my_strstr(arr, brr);
	printf("%s", p);
	return 0;
}

3.2strtok函数

        

        我们可以看到,strtok函数返回类型是char*,它的参数是 、char * str, const char * delimiters,这个函数是字符串切割,需要两个字符串,第一个字符串中出现第二个字符串就会进行切割然后指向此段的首字符,具体的代码如下:

#include <string.h>
#include <stdio.h>
int main()
{
	char arr[] = "abc,abcd@efacd*add";
	char brr[] = ",@*";
	char* str = arr;
	for (str = strtok(arr, brr); str != NULL; str = strtok(NULL, brr))
	{
		printf("%s\n", str);
	}
	return 0;
}

今天的内容就结束了,希望大家可以一键三连。

C/C++常用字符串处理函数详解 及 手动替代实现(自行复习用) 当字符串中有多个尾零,一般只处理到第一个尾零部分处理函数中,n超过截取串的总串长,就取整串返回值:strlen / strcmp 系列为整型数;strcpy / strcat 系列为字符数组(包括部分处理的衍生函数) 阅读详情

相关推荐

超详细讲解长度不受限制的字符串函数(保姆级教程!!!)

超详细讲解长度不受限制的字符串函数(保姆级教程!!!)

weixin_72817878的博客 783

C++一本通1239显示程序有被限制的函数解决方法

C++一本通1239显示有被控制函数解决方案

w_m_x_d的博客 787

【C语言】字符串的输入和输出 控制用户输入长度 fgets()函数 | C语言面试:解释一下C语言中的局部变量和全局变量的生命周期和作用域。

案例 和上篇博文一样,也是由用户输入一个名字,再输出。这里要求控制用户输入的长度。即防止缓冲区溢出。而函数gets()不能限制输出字符串的长度,很容易引起缓冲区溢出。 这里使用能限制输入字符串长度的函数, fgets(name,sizeof(name),stdin); 将更有利于设计安全可靠的程序。 #include <stdio.h> #define N 10 int main(){ char name[N]; printf("Enter your name:"); fgets(na

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 3744

获取C/C++字符串、字符数组长度

在C/C++中常用的获取字符串长度或者字符串数组长度的函数有 sizeof() length() strlen() size() 其中strlen(str)和str.length()和str.size()都可以用来求字符串的长度 str.length()和str.size()是用于求string类对象的成员函数 strlen(str) 是用于求字符串数组的长度,其参数是char* 辨析str...

CrazyTony的博客 3642

DRAM刷新refresh相关知识归类-基础小知识(三)

RAM每一位数据都是通过芯片内的一个小电容充电(或低电平)存储的。但随着时间的推移,电容逐渐失去电荷。为避免丢失存储的数据,必须定期刷新以将电荷(如果存在)恢复到其原始级别。此刷新过程包括读取每个位的值,然后将其写回。在此“刷新”期间,内存被占用,无法执行加载或存储位等正常操作。知道了应该这么做,但怎么去做以及有什么办法更有效率去做,就是接下来要整理的内容。

Paul 安的博客 1万+

腾讯开源CubeSandbox:为Agent打造可随时丢弃的安全沙箱环境

在人工智能与自动化技术快速发展的今天,智能体(Agent)在执行复杂任务时往往需要独立、完整的计算环境,但环境失控带来的安全风险一直是落地瓶颈。为解决这一痛点,可丢弃式沙箱技术应运而生。它通过轻量虚拟化原理实现环境秒级重建,并严格隔离宿主资源,即使Agent执行了恶意或误操作,也不会波及其他系统。这种技术价值在于平衡了灵活性与安全性,使开发者敢于赋予Agent更多自主操作权限。目前,这类技术已广泛应用于AI编程、自动化测试、数字员工、恶意代码分析等真实场景,成为Agent可靠运行的基石。腾讯开源的CubeS

weixin_42539414的博客 254

C++字符串格式化 sprintf、printf

【区别】由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。 sprintf 是个变参函数,定义如下: int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数

Jane_yuhui的专栏 1万+

【CSP-S 提高组】考试大纲集合

【CSP-S提高组】考试大纲集合

weixin_42596089的博客 7255

C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数

对于字符串这一部分我们想到的大部分是字符串的创建,const修饰字符串,指针指向字符串,字符指针,字符数组这些内容,实际上在C语言中有一些字符函数和字符串函数。C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串 中或者 字符数组中。字符串常量 适用于那些对它不做修改的字符串函数。

Infernal_Puppet的博客 731

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3270

Qt C++ 的虚拟演播室系统

**数据流转**:OpenCV 处理的图像格式通常是 `cv::Mat`,而 Qt 3D 渲染需要 `QImage` 或 `QTexture2D`。// 临时用颜色代替。// 前景在背景前面。#### 3.3 主窗口与 Qt 3D 集成 (`mainwindow.h` / `.cpp` / `.ui`)* **更复杂的 3D 场景**:加载 3D 模型(.obj, .gltf 等)作为背景和道具。1. **构建项目**:确保 `.pro` 文件中的 OpenCV 路径配置正确,然后构建项目。

寒寒豆豆软件公司的博客 112

C/C++字符串函数

C语言字符串函数C语言字符串函数字符串的长度功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 C语言字符串函数 字符串的长度 strlen(const char* s) 在s中遇到’\0’为止,返回字符串长度 功能快捷键 撤销:Ct

Catprint的博客 1585

① Django手把手从零开发个人博客-前言

手把手教你从零开始玩转手把手教你从零开始玩转Django,全面学习并了解django的运行机制、开发全流程及线上部署。Django,全面学习并了解django的运行机制、开发全流程及线上部署。 专栏介绍 本套教程遵循Django的设计思想,开门见山,快速切入主题,拒绝拖沓,在实战中学习每一个知识点,提高学习的趣味性以及个人成就感,并且能快速将所学运用到实际项目中。 将从零手把手带着你一步步完成博客的每一个功能,通过实现博客文章列表页、文章详情页、作者页面等功能来学习和了解django的视图查询模块相关知.

轻编程的博客 513

C语言——字符和字符串函数

在我们进行编程的过程中,我们经常要处理字符和字符串,为了⽅便操作字符和字符串,C语⾔标准库中提供了 ⼀系列库函数,使用字符函数和字符串函数分别包含头文件 <ctype.h>和头文件<strling.h>。下面我就简单介绍一下常用的字符和字符串函数。(本篇文章参考一、字符函数C 语言中有一系列的函数是专门做分类的,简单来说就是判断这个字符是属于什么类型的,而使用这些函数都需要包含一个下面我们就简单介绍一下这些函数(可点击直接跳跃查看具体介绍)函数所给参数若符合下列的条件,返回真iscntrl。

2301_80004913的博客 2058

openclaw update时出现Skipped:this OpenClaw install isn‘t a git checkout,and the package manager解决方案

本文主要介绍了openclaw update时出现openclaw update时出现Skipped:this OpenClaw install isn’t a git checkout,and the package manager解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

使用mid360运行lio-livox对比fast-lio2

msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。

z1872385的博客 1230

C/C++字符函数和字符串函数详解————内存函数详解与模拟

前面学习了关于长度受限制的字符串函数和长度不受限制的字符串函数,其中strcmp对应strncmp函数,strcpy函数对应strncpy函数,strcat函数对应strncat函数,今天我们主要了解的是四个内存函数他们分别是memcpy函数,memmove函数,memset函数,memcmp函数。其中memcpy函数和strcpy函数的功能类似,memcmp函数和strcmp函数类似,接下来就让我们感受一下这些函数的魅力吧。

Infernal_Puppet的博客 2764

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C语言】字符函数和字符串函数详解

strncpystrncatstrncmp。

编程知识点梳理、项目经验总结、学习方法分享 2197

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项

不能字符串自己追加自己,因为当自己追加自己的时候,追加的过程中会将目标字符串的 '\0' 覆盖掉,而有因为此时目标字符串就是源字符串,就会导致源字符没有 '\0' ,将会一直拼接下去导致死循环。2、因为strlen返回的是 '\0' 前面的字符个数,如果字符串中间本身就一个'\0',那么返回的值就会返回字符串中的'\0'之前的字符个数。在实际开发中,我们不一定知道这个字符串是怎样的,这个字符串需要切割几次的,因此手动设置切割几次将代码写死的方式是不可取,而应该使用。如果真有自己追加自己的场景,建议使用。

Hacynn的博客 2066

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

字符函数和字符串函数

直到遇到 source 中的 '\0',并将 '\0' 也复制到 destination,确保目标字符串以 '\0' 结尾。'i':是小写,转换为 I 输出。'n':是小写,转换为 N 输出。't':是小写,转换为 T 输出。'r':是小写,转换为 R 输出。's':是小写,转换为 S 输出。't':是小写,转换为 T 输出。'e':是小写,转换为 E 输出。'g':是小写,转换为 G 输出。即统计字符串中 '\0' 终止符之前 的字符个数,不包含 '\0' 本身。

2503_92106372的博客 677

【C语言】字符函数,字符串函数,内存函数

C语言中的字符串函数和内存函数

m0_62531913的博客 1386

c语言自学教程——字符函数和字符串函数

strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror memcpy memmove memcmp

qq_47882731的博客 1368

【C/C++】常用的字符串库函数

C语言的字符串函数。在C语言中,有一些常用的字符串库函数可用于处理字符串。

无敌岩雀的博客 922

字符串函数的使用与模拟

对于想了解一个C/C++的函数,我们可以访问网站,在里面进行查询函数的使用方式以及功能描述,我就把网站的描述贴在下面了:strlen是初始化的长度,并非存放字符串的空间长度。使用方式是字符串的长度取决于strlen是否识别到null字符(也就是\0),stlren会返回在字符串中出现'\0'前面的字符个数,在使用这个函数时要注意这一点。那我们来验证一下,请看如下代码int main()return 0;

qq_74073777的博客 1902

C语言之字符函数&字符串函数篇(1)

终于结束指针了,但是还需要多多练习和复习。接下来我们进入字符函数和字符串函数的讲解。中秋和国庆即将来临,终于要放假了回家了。

m0_74841364的博客 688
上一篇: C/C++字符函数和字符串函数模拟实现与详解————长度不受限制的字符串函数
下一篇: C/C++字符函数和字符串函数详解————内存函数详解与模拟
steventom
博客等级 码龄4年 720粉丝 80原创
评论 46
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

steventom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值