c语言-string.h库函数初识

目录


前言

本篇文章介绍c语言<string.h>头文件中的库函数,包含strlen()、strcpy()、strcmp()


一、库函数strlen()

1.1 strlen()介绍

库函数strlen()是一个求c语言字符串长度的一个实现。下面是cplusplus网站关于这个库函数的介绍以及使用。

作用:获取字符串长度
c语言字符串的长度由空字符决定计算是否终止,即\0。
c语言计算字符串长度的方法是从字符串第一个字符开始计算直到遇到空字符结束不包含空字符本身 )。

返回值类型: size_t,size_t在C语言被定义为unsigned int

注意:不要将字符数组长度和字符串长度相混淆。例如

1.2 模拟实现strlen()

通过模拟实现strlen(),可以加深对这个函数的理解,实现代码和测试截图如下:

c 复制代码
#include<string.h>
#include<assert.h>
//3.模拟实现strlen
int my_strlen(const char* str)
{
	assert(str != NULL);  //为真往下走,为假停止
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

测试截图:


二、库函数strcpy()

2.1 strcpy()介绍

库函数strcpy()是一个c语言字符串拷贝的实现。下面是cplusplus网站关于这个库函数的介绍以及使用。

作用:字符串拷贝
将指针source指向的字符串内容复制到destination指针指向的字符数组中(包括空字符\0)
注意:
为了避免溢出,destination指向的字符数组长度应该至少可以容纳source指向的字符串(包含\0)。
返回值类型: char *
返回值:destination

使用例子如下:

2.2 模拟实现strcpy()

通过模拟实现strcpy(),可以加深对这个函数的理解,代码实现和测试截图如下:

c 复制代码
//模拟实现strcpy
char* my_strcpy(char* destination, const char* source)
{
	assert(destination != NULL); //空指针判断
	assert(source != NULL);      //空指针判断
	char* destination_start = destination; //保存destinaiton的起始位置
	while((*destination++ = *source++) != '\0')
	{
		NULL;
	}
	return destination_start;
}

测试结果截图:

问题:返回destination的目的是什么?
为了实现函数的链式调用

c 复制代码
	int length = strlen(my_strcpy(destination, source));

三、库函数strcmp()

3.1 strcmp()介绍

库函数strcmp()是一个进行两个字符串比较的实现。下面是cplusplus网站关于这个库函数的介绍以及使用。

作用:两个字符串比较
这个函数从两个字符串的第一个字符开始比较,如果当前比较的两个字符相等,则继续比较两个字符串的下一个字符,直到两个字符不同或者遇到了空字符

根据返回值的大小确定两个字符串的关系:

返回值 含义
<0 两个字符串第一个不相同的字符,str1指向的字符串的字符ASCII值小于str2
0 两个字符串的内容相同
>0 两个字符串第一个不相同的字符,str1指向的字符串的字符ASCII值大于str2

使用例子如下:

3.3 模拟实现strcmp()

通过模拟实现strcmp(),可以加深对这个函数的理解,代码实现和测试截图如下:

c 复制代码
int my_strcmp(const char* str1, const char* str2)
{
	assert((str1 != NULL) && (str2 != NULL)); //空指针判断

	while ((*str1 == *str2) && (*str1 != '\0'))
	{
		str1++;
		str2++;
	}
	return (*str1 - *str2);
}

测试结果截图:


总结

本篇文章介绍了c语言<string.h>头文件中的库函数,对strlen()、strcpy()、strcmp()三个函数进行介绍以及展示了如何使用它们,最后,为了加深对这三个函数的理解,分别模拟实现这三个函数。

相关推荐
遇见尚硅谷3 小时前
C语言:游戏代码分享
c语言·开发语言·算法·游戏
Jess075 小时前
归并排序递归法和非递归法的简单简单介绍
c语言·算法·排序算法
双叶8366 小时前
(C++)STL标准库(vector动态数组)(list列表)(set集合)(map键值对)相关对比,基础教程
c语言·开发语言·数据结构·c++·list
j_xxx404_8 小时前
c语言:字符函数和字符串函数
c语言·开发语言
apocelipes9 小时前
C23和C++26的#embed嵌入资源指南
c语言·c++·开发工具和环境·c23·c++26
liweiweili12611 小时前
GPT和MBR分区
c语言
菜鸟12号11 小时前
详解Linux下多进程与多线程通信(一)
linux·c语言·嵌入式·进程与线程
学不动CV了11 小时前
深入理解C语言内存空间、函数指针(三)(重点是函数指针)
c语言·arm开发·数据库·stm32·单片机·嵌入式硬件·c#
2301_7811435613 小时前
江协科技STM32入门教程——通信接口
c语言·嵌入式
定偶13 小时前
C语言中整数编码方式(原码、反码、补码)
c语言·数据结构·编辑器