c进阶篇(三):字符串函数

1.strlen:

strlen - C++ Reference

strlen 函数是一个标准库函数,用于计算以 null 结尾的字符串的长度,也就是字符串中实际字符的数量,不包括最后的 null 终止符 \0。它定义在 <string.h> 头文件中。

函数原型:size_t strlen(const char *str);

参数:str:指向以 null 结尾的字符串的指针。

返回值:返回一个 size_t 类型的值,表示字符串 str 中的字符数,不包括结尾的 null 字符。

使用示例:

模拟其实现代码如下:

size_t my_strlen1(const char *str) {
	int count = 0;
	assert(str != NULL);
	while (*str++) {
		count++;
	}
	return count;
}
size_t my_strlen2(const char* str) {
	assert(str != NULL);
	if (*str != '\0') {
		return 1 + my_strlen2(str+1);
	}
	else {
		return 0;
	}
}
size_t my_strlen3(const char* str) {
	assert(str != NULL);
	char* start = str;
	while (*str) {
		str++;
	}
	return str - start;
}

2.strcpy

strcpy - C++ Reference

函数原型:char *strcpy(char *dest, const char *src);

参数:dest:目标字符串的指针,它是一个指向足够大的字符数组或者字符指针,用于存储复制后的字符串。src:源字符串的指针,是一个指向以 null 结尾的字符串的指针,将被复制到目标字符串中。

返回值:返回指向目标字符串 dest 的指针,即复制后的字符串的起始地址。

使用示例:

模拟其实现代码如下:

char* my_strcpy(char* dest, const char* str) {
	char* ret = dest;
	assert(str && dest);
	while (*dest++ = *str++) {
		;
	}

	return ret;
}

注意事项:

  1. 目标字符串必须足够大dest 指向的内存空间必须足够大,能够容纳 src 指向的字符串及其结尾的 null 字符。否则可能会导致缓冲区溢出,产生未定义的行为。

  2. null 结尾符strcpy 函数会复制 src 指向的字符串直到遇到 null 结尾符为止。因此,复制的结果将会包括 null 结尾符。

  3. 安全性:使用 strcpy 函数时,应确保 src 指向的字符串确实以 null 结尾,否则可能会导致未定义的行为。

3.strcat

strcat - C++ Reference

strcat 函数用于将一个字符串追加到另一个字符串的末尾。它同样定义在 <string.h> 头文件中。

函数原型:char *strcat(char *dest, const char *src);

参数dest:目标字符串的指针,是一个以 null 结尾的字符数组或者字符指针,将被用作目标。

src:源字符串的指针,是一个以 null 结尾的字符数组或者字符指针,将被追加到目标字符串的末尾。

返回值:返回指向目标字符串 dest 的指针,即追加后的字符串的起始地址。

使用示例:

模拟其实现代码如下:

char* my_strcat(char* dest, const char* str) {
	assert(str&&dest);
	char* ret = dest;
	while (*dest) {
		dest++;
	}
	while (*dest++=*str++) {
		;
	}

	return ret;
}

注意事项

  1. 目标字符串必须足够大:与 strcpy 类似,dest 指向的内存空间必须足够大,能够容纳 src 指向的字符串及其结尾的 null 字符。否则可能会导致缓冲区溢出,产生未定义的行为。

  2. null 结尾符strcat 函数会在目标字符串 dest 的结尾 null 字符的位置开始追加 src 指向的字符串。因此,追加后的结果仍然以 null 结尾。

  3. 安全性:使用 strcat 函数时,应确保 dest 指向的目标字符串足够大,且确保 src 指向的字符串以 null 结尾

4.strcmp

strcmp - C++ Reference

strcmp 函数是用于比较两个字符串的内容是否相同。它同样定义在 <string.h> 头文件中。

函数原型:int strcmp(const char *str1, const char *str2);

参数:str1:要比较的第一个字符串的指针。str2:要比较的第二个字符串的指针。

返回值:如果 str1 和 str2 的内容相同,则返回值为 0。如果 str1 的内容大于 str2 的内容,则返回正值。如果 str1 的内容小于 str2 的内容,则返回负值。

使用示例:

模拟其实现代码如下:

int  my_strcmp(const char* str1, const char* str2) {
	assert(str1 && str2);
	
	while (*str1 == *str2) {
		str1++;
		str2++;
	}
	if (*str1 == "\0") {
		return 0;
	}
	return *str1 - *str2;
}

注意事项

  1. null 结尾符strcmp 函数会比较 str1str2 指向的字符串,直到遇到 null 结尾符为止。

  2. 大小写敏感strcmp 是区分大小写的,即大写字母和小写字母被视为不同的字符。

  3. 安全性:使用 strcmp 函数时,应确保 str1str2 都是以 null 结尾的有效字符串,否则可能会导致未定义的行为。

5.strstr

strstr - C++ Reference

strstr 函数用于在一个字符串中搜索指定子字符串的第一次出现,并返回一个指向该子字符串的指针。它同样定义在 <string.h> 头文件中。

函数原型:char *strstr(const char *haystack, const char *needle);

参数:haystack:要搜索的主字符串,即被搜索的字符串。needle:要查找的子字符串,即要搜索的目标字符串。

返回值:如果 needle 存在于 haystack 中,则返回一个指向 needle 在 haystack 中第一次出现的位置的指针。如果 needle 不存在于 haystack 中,则返回 NULL

使用示例:

模拟其实现代码如下:

char* my_strstr(const char*str1, const char* str2) {
	assert(str1 && str2);
	const char* s1 = str1;
	const char* s2 = str2;
	const char* p = str1;
	while(*p){
		s1 = p;
		s2 = str2;
		while (*s1 == *s2 && str1!='\0' && str2!='\0') {
			s1++;
			s2++;

		}	
		if (*s2 == '\0') {
			return p;
		}
		
		p++;
	}
	return NULL;
}


注意事项

  1. 大小写敏感strstr 函数是区分大小写的,即大写字母和小写字母被视为不同的字符。

  2. 空字符串:如果 needle 是一个空字符串 (""),则 strstr 函数将返回 haystack 的起始地址,因为任何字符串都包含空字符串。

  3. 安全性:确保 haystackneedle 都是以 null 结尾的有效字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/763192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式UI开发-lvgl+wsl2+vscode系列:5、事件(Events)

一、前言 这节进行事件的总结&#xff0c;通过事件回调方式将用户和ui的交互行为绑定组合起来。 二、事件示例 1、示例1&#xff08;点击事件&#xff09; #include "../lv_examples.h" #if LV_BUILD_EXAMPLES && LV_USE_SWITCHstatic void event_cb(lv_…

关于发那科机器人系统升级方法

首先需要镜像备份和全备份&#xff0c;最好把机器人要到刻度线位置&#xff0c;零点位置 选择控制器启动&#xff0c;也可以按preevnext进入控制器模式

Spring Boot 实现 AOP 动态热插拔功能并附DEMO源码

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

排序(堆排序、快速排序、归并排序)-->深度剖析(二)

前言 前面介绍了冒泡排序、选择排序、插入排序、希尔排序&#xff0c;作为排序中经常用到了算法&#xff0c;还有堆排序、快速排序、归并排序 堆排序&#xff08;HeaSort&#xff09; 堆排序的概念 堆排序是一种有效的排序算法&#xff0c;它利用了完全二叉树的特性。在C语言…

2023软考中级《软件设计师》(备考冲刺版) | 数据库系统

目录 1.数据库的基本概念 1.1 数据库体系结构 1.2 三级模式结构 1.3 数据仓库 2.数据库设计过程 2.1 概念结构设计 2.1.1 概念设计过程 2.1.2 E-R图 2.2 逻辑结构设计 2.2.1 关系模式相关概念 2.2.2 E-R图转关系模式&#xff08;涉及下午题&#xff09; 2.2.3 关系…

以太网电缆专家手册:掌握RJ45连接器压接的艺术与科学

在这个日新月异的数字时代&#xff0c;正确的连接方式至关重要&#xff0c;而RJ45连接器正是实现这一点的关键工具之一。无论您是在家中布置办公网络&#xff0c;还是在公司部署复杂的IT基础架构&#xff0c;或是进行任何需要设备间高效数据传输的活动&#xff0c;掌握如何正确…

从实验室走向商业化,人形机器人时代要来了?

从国内市场看&#xff0c;据机构报告显示&#xff0c;预计到2026年中国人形机器人产业规模将突破200亿元。特别是在生成式AI技术大爆发的当下&#xff0c;未来人形机器人更是极有可能实现超预期增长。 近日&#xff0c;特斯拉CEO埃隆马斯克(Elon Musk)在特斯拉2024年股东大会上…

深入解析HDFS:定义、架构、原理、应用场景及常用命令

引言 Hadoop分布式文件系统&#xff08;HDFS&#xff0c;Hadoop Distributed File System&#xff09;是Hadoop框架的核心组件之一&#xff0c;它提供了高可靠性、高可用性和高吞吐量的大规模数据存储和管理能力。本文将从HDFS的定义、架构、工作原理、应用场景以及常用…

3d里面减小模型大小的键是什么意思?---模大狮模型网

在3D建模和动画制作中&#xff0c;调整模型的大小是常见的操作&#xff0c;但这并不仅仅意味着简单地改变模型的尺寸。特别是当我们谈论到"减小模型大小的键"时&#xff0c;涉及到更深层次的技术和工作流程。让我们深入探讨这一话题&#xff0c;理解在3D环境中如何有…

赋能心理大模型,景联文科技推出高质量心理大模型数据库

生成式大模型作为当前发展势头最为强劲的人工智能前沿技术&#xff0c;其在临床心理学领域中的创新应用已成为社会关注和医学聚焦的热点之一。 心理大模型在落地应用过程中可能面临的痛点主要包括以下几个方面&#xff1a; 数据隐私与安全&#xff1a;确保敏感的个人信息在模型…

# 职场生活之道:善于团结

在职场这个大舞台上&#xff0c;每个人都是演员&#xff0c;也是观众。要想在这个舞台上站稳脚跟&#xff0c;除了专业技能&#xff0c;更要学会如何与人相处&#xff0c;如何团结他人。团结&#xff0c;是职场生存的重要法则之一。 1. 主动团结&#xff1a;多一个朋友&#x…

祝贺《华为战略管理法:DSTE实战体系》被《中国企业家》杂志评为企业家枕边书50本之一(宏观战略类书籍)

祝贺《华为战略管理法&#xff1a;DSTE实战体系》被《中国企业家》杂志评为企业家枕边书50本之一 2024年4月23日&#xff08;周二&#xff09;下午13:00&#xff0c;《中国企业家》杂志如期举办“每天都是读书日”线下活动。 《中国企业家》杂志携手商界大咖共同推选50本枕边书…

基于X86+FPGA+AI的智能仓储AGV机器人解决方案

应用场景 智能仓储是物流过程的一个环节&#xff0c;智能仓储的应用&#xff0c;保证了货物仓库管理各个环节数据输入的速度和准确性&#xff0c;确保企业及时准确地掌握库存的真实数据&#xff0c;合理保持和控制企业库存&#xff0c;其中搬运环节目前已大量采用AGV的方式进行…

Administrators就最高了???system是什么??本地用户提权内网学习第三天 你知道uac是什么??

我们今天来说说本地用户提权的操作&#xff0c;我们在有webshell过后我们要进行进一步的提权操作&#xff0c;要不然对我们后期的内网渗透会有一些阻碍的操作。比如说我们使用mimikatz来进行抓取密码&#xff0c;就不能够成功。 Administrators与system的区别 我们来说说Admin…

高考不是终点:如何利用教育资源实现人生跃迁?普鲁士教育的利弊,你了解吗?从科举到高考,中国教育的变迁!链接上层,获取核心资源的途径

高考已经结束&#xff0c;这两天分数将会陆续出来&#xff0c;无论结果好坏&#xff0c;我都希望你明白一些道理。这些道理在学校老师不会教你&#xff0c;但是非常重要。 一、中国的科举制度 科举制度是为王朝服务的。 科举制度是中国古代通过考试选拔官员的制度&#xff0c…

2024年道路运输安全员(企业管理人员)备考题库资料。

46.危险货物道路运输随车携带的单据&#xff0c;下列选项不属于的是&#xff08;&#xff09;。 A.道路运输危险货物安全卡 B.运单或者电子运单 C.道路危险货物运输从业资格证 D.车辆检测报告 答案&#xff1a;D 47.危险货物运输驾驶人员在24小时内实际驾驶车辆时间累计不…

Generating Diverse Structure for Image Inpainting With Hierarchical VQ-VAE

Jialun Peng1 Dong Liu1* Songcen Xu2 Houqiang Li1 1 University of Science and Technology of China 2 Noahs Ark Lab, Huawei Technologies Co., Ltd.pjlmail.ustc.edu.cn, {dongeliu, lihq}ustc.edu.cn, xusongcenhuawei.com 原文提供代码链接&#xff1a; GitHub - UST…

(必看图文)Hadoop集群安装及MapReduce应用(手把手详解版)

前言 随着大数据时代的到来&#xff0c;处理和分析海量数据已成为企业和科研机构不可或缺的能力。Hadoop&#xff0c;作为开源的分布式计算平台&#xff0c;因其强大的数据处理能力和良好的可扩展性&#xff0c;成为大数据处理领域的佼佼者。本图文教程旨在帮助读者理解Hadoop集…

一次搞懂 Python 字典!Python字典的20种神奇用法

目录 引言 1. 创建字典 2. 访问字典元素 3. 添加或更新元素 4. 删除元素 5. 检查键是否存在 6. 获取字典的长度 7. 遍历字典 8. 合并字典 9. 字典推导式 10. 获取所有键 11. 获取所有值 12. 获取所有键值对 13. 从字典中获取值 14. 设置默认值 15. 清空字典 1…

《RepViT Revisiting Mobile CNN From ViT Perspective》

期刊&#xff1a;CVPR 年份&#xff1a;2024 代码&#xff1a;http://https: //github.com/THU-MIG/RepViT 摘要 最近&#xff0c;与轻量级卷积神经网络(CNN)相比&#xff0c;轻量级视觉Transformer(ViTs)在资源受限的移动设备上表现出了更高的性能和更低的延迟。研究人员已…