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()三个函数进行介绍以及展示了如何使用它们,最后,为了加深对这三个函数的理解,分别模拟实现这三个函数。

相关推荐
小青龙emmm1 小时前
2025级C语言第四次周测题解
c语言·开发语言·算法
树在风中摇曳1 小时前
【牛客排序题详解】归并排序 & 快速排序深度解析(含 C 语言完整实现)
c语言·开发语言·算法
序属秋秋秋3 小时前
《Linux系统编程之进程基础》【进程优先级】
linux·运维·c语言·c++·笔记·进程·优先级
小曹要微笑12 小时前
STM32各系列时钟树详解
c语言·stm32·单片机·嵌入式硬件·算法
inputA13 小时前
【LwIP源码学习8】netbuf源码分析
android·c语言·笔记·嵌入式硬件·学习
我不会插花弄玉16 小时前
排序【由浅入深-数据结构】
c语言·数据结构
No0d1es17 小时前
电子学会青少年软件编程(C/C++)六级等级考试真题试卷(2025年9月)
c语言·c++·算法·青少年编程·图形化编程·六级
Knox_Lai17 小时前
数据结构与算法学习(0)-常见数据结构和算法
c语言·数据结构·学习·算法
逐步前行18 小时前
C项目--羊了个羊(两关全)--含源码
c语言·开发语言
赖small强19 小时前
【Linux C/C++开发】第10周:STL容器 - 理论与实战
linux·c语言·c++·stl容器