当前位置: 首页 > news >正文

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

在这里插入图片描述
个人主页
在这里插入图片描述

文章目录

  • ⭐一、strcpy函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用
    • 3.模拟实现
  • ⏱️二、strcat函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用
    • 3.模拟实现
  • 🎈三、strcmp函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用
    • 3.模拟实现
  • 🎉四、strncpy函数 --- 长度受限字符串拷贝
    • 1.函数形式以及功能介绍
    • 2.函数的使用
  • 🎡五、strncat --- 长度受限字符串拼接
    • 1.函数形式以及功能介绍
    • 2.函数的使用
  • 🎄六、strncmp --- 长度受限字符串比较
    • 1.函数形式以及功能介绍
    • 2.函数的使用
  • 🚀七、strstr函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用
    • 3.模拟实现
  • 🏠八、strtok函数 --- 字符串分割函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用
  • 🏝️九、strerror函数
    • 1.函数形式以及功能介绍
    • 2.函数的使用

⭐一、strcpy函数

1.函数形式以及功能介绍

函数形式:char* strcpy(char * destination, const char * source );

功能:将一个源字符串的内容完整拷贝到目标字符串中

在拷贝的过程中需要注意以下几点内容:

  1. 源字符串必须以 ‘\0’ 结束。
  2. 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  3. 目标空间必须足够大,以确保能存放源字符串,否则就会发生报错。
  4. 目标空间必须可修改,不能加const修饰。

2.函数的使用

在使用时需要包含头文件:#include<string.h>

在这里插入图片描述

3.模拟实现

了解了strcpy的功能以及使用,下面我们就模拟实现一下该函数

char* my_strcpy(char* dest, char* src)
{
	//记录目标空间的起始位置
	char* p = dest;
	assert(dest && src);
	while (*dest++ = *src++)
	{
		;
	}
	return p;
}

⏱️二、strcat函数

1.函数形式以及功能介绍

函数形式:char * strcat ( char * destination, const char * source );

功能:将一个字符串连接到另一个字符串的末尾。

使用时注意以下几点:

  1. 源字符串必须以 ‘\0’ 结束。
  2. 目标字符串中也得有 \0 ,否则没办法知道追加从哪里开始。
  3. 目标空间必须有足够大,能容纳下源字符串的内容。
  4. 目标空间必须可修改,不能加const修饰。

2.函数的使用

在使用前也需包含头文件:#include<string.h>

在这里插入图片描述

3.模拟实现

char* my_strcat(char* dest, char* src)
{
	assert(dest && src);
	// 记录目标空间的地址
	char* p = dest;
	// 找到目标空间'\0'的位置
	while (*dest != '\0')
	{
		dest++;
	}
	// 完成字符串追加功能
	while (*dest++ = *src++)
	{
		;
	}
	return p;
}

🎈三、strcmp函数

1.函数形式以及功能介绍

函数形式:int strcmp ( const char * str1, const char * str2 );

功能:用于比较两个字符串的大小关系(逐个字符进行比较它们的ASCII码值)

• 当第一个字符串大于第二个字符串时,返回 >0 的数字

• 当第一个字符串等于第二个字符串时,返回 0

• 当第一个字符串小于第二个字符串时,返回 <0 的数字

2.函数的使用

在使用前包含头文件:#include<string.h>

在这里插入图片描述

3.模拟实现

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

🎉四、strncpy函数 — 长度受限字符串拷贝

1.函数形式以及功能介绍

函数形式:char * strncpy ( char * destination, const char * source, size_t num );

功能:将一个字符串的前 num 个字符复制到另一个字符串中

使用时需要注意:如果源字符串的长度小于num,则拷贝完源字符串之后,在目标字符串的后边追加0,直到num个。

2.函数的使用

在这里插入图片描述

🎡五、strncat — 长度受限字符串拼接

1.函数形式以及功能介绍

函数的形式:char * strncat ( char * destination, const char * source, size_t num );

功能:将源字符串的前num个字符追加到目标字符串的末尾,再追加⼀个 \0 字符

注意:如果源字符串的长度小于num的时候,只会将字符串中到 ‘\0’ 的内容追加到目标字符串的末尾

2.函数的使用

在这里插入图片描述

🎄六、strncmp — 长度受限字符串比较

1.函数形式以及功能介绍

函数形式:int strncmp ( const char * str1, const char * str2, size_t num );

功能:比较str1和str2的前num个字符,相等就继续往后⽐较,最多比较num个字符

返回值和strcmp函数一样

2.函数的使用

在这里插入图片描述

🚀七、strstr函数

1.函数形式以及功能介绍

函数形式:char * strstr ( const char * str1, const char * str2);

功能:函数返回字符串str2在字符串str1中第⼀次出现的位置

2.函数的使用

在这里插入图片描述

3.模拟实现

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	char* s1 = NULL;
	char* s2 = NULL;
	char* cur = str1;
	//如果目标字符串为空,则返回源函数的地址
	if (*str2 == '\0')
	{
		return (char*)str1;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cur;
		}
		cur++;
	}
	return NULL;
}

🏠八、strtok函数 — 字符串分割函数

1.函数形式以及功能介绍

函数形式:char * strtok ( char * str, const char * sep);

功能:将一个字符串分割成多个子字符串,每次调用返回一个子字符串。

使用时需要注意以下几点:

  1. strtok 会从字符串 str 的开头开始,查找第一个不在分隔符字符串中的字符
  2. 将找到的分隔符字符替换为空字符(\0),从而将字符串分割成两部分
  3. 从第二次调用开始,str 必须传入 NULL,因为strtok 会从上次保存的位置继续查找
  4. 如果没有更多的子字符串,则返回 NULL。

2.函数的使用

在这里插入图片描述

🏝️九、strerror函数

1.函数形式以及功能介绍

函数形式:char * strerror ( int errnum );

功能:把参数部分错误码对应的错误信息的字符串地址返回来。

2.函数的使用

在这里插入图片描述

相关文章:

  • AtCoder Beginner Contest 398(ABCDEF)
  • MySQL密码修改的全部方式一篇详解
  • 使用brower use AI 代理自动控制浏览器完成任务
  •  UNIX网络编程笔记:TCP客户/服务器程序示例
  • 基于springboot的房屋租赁系统(028)
  • 电机控制常见面试问题(十七)
  • JetsonNano —— 4、Windows下对JetsonNano板卡烧录刷机Ubuntu20.04版本(官方教程)
  • 『uniapp』简单文本复制文字 富文本内容复制文字(详细图文注释)
  • GOC按钮点击器
  • 【JavaEE进阶】部署Web项目到Linux服务器
  • cartographer中地图转换
  • VMware虚拟机安装银河麒麟操作系统v10
  • Mininet源码框架概述
  • 深入 C++11:移动语义、Lambda表达式与新特性全面解析
  • 基于linux平台的C语言入门教程(3)代码注释
  • 【计算机网络原理】选择题+简答题
  • AI密码学
  • 基于linux平台的C语言入门教程(8)算术运算符
  • Qt+FFmpeg+SDL2播放进度显示及定位播放
  • Java多线程与高并发专题——Future 是什么?
  • 中国防疫队深入缅甸安置点开展灾后卫生防疫工作
  • 2025上海体育消费节启动,多形式联动打造体育消费盛宴
  • “自己生病却让别人吃药”——抹黑中国经济解决不了美国自身问题
  • 中介在网上非法贩婴“一个孩子8.5万元”?丹阳警方介入
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 挤占学生伙食费、公务考察到景区旅游……青岛通报5起违规典型问题