目录
前言
本篇文章介绍c语言<string.h>头文件中的库函数,包含strlen()、strcpy()、strcmp()、strcat()
一、库函数strlen()
1.1 strlen()介绍
库函数strlen()是一个求c语言字符串长度的一个实现。下面是cplusplus网站关于这个库函数的介绍以及使用。
作用:获取字符串长度
c语言字符串的长度由空字符决定计算是否终止,即\0。
c语言计算字符串长度的方法是从字符串第一个字符开始计算直到遇到空字符结束(不包含空字符本身)。
返回值类型: size_t
,size_t在C语言被定义为unsigned int
注意:不要将字符数组长度和字符串长度相混淆。例如
1.2 模拟实现strlen()
通过模拟实现strlen(),可以加深对这个函数的理解,实现代码和测试截图如下:
#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(),可以加深对这个函数的理解,代码实现和测试截图如下:
//模拟实现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的目的是什么?
为了实现函数的链式调用。
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(),可以加深对这个函数的理解,代码实现和测试截图如下:
int my_strcmp(const char* str1, const char* str2)
{
assert((str1 != NULL) && (str2 != NULL)); //空指针判断
while ((*str1 == *str2) && (*str1 != '\0'))
{
str1++;
str2++;
}
return (*str1 - *str2);
}
测试结果截图:
四、库函数strcat()
4.1 strcat()介绍
库函数strcat()实现的是字符串追加。下面是cplusplus网站关于这个库函数的介绍以及使用。
作用:字符串追加
在destination指向的字符串末尾追加source指向的字符串内容。
注意:
- 源字符串串必须以’\0’结束
- 目标空间必须足够大,可以容纳源字符串的内容
- 目标空间可修改
strcat()的使用
4.2 模拟实现strcat()
参数1: char* destination
参数2:const char* source
返回值类型: char*
实现思路:
- 找到destination指向的字符串的末尾位置,即\0位置
- 把source指向的字符串逐一拷贝到目标字符串中,包含源字符串的\0
代码实现如下:
#include<assert.h>
#include <stdio.h>
#include <string.h>
char* my_strcat(char* destination, const char* source)
{
//空指针判断
assert(destination && source);
//保存destinaiton的起始位置
char* dest_start = destination;
//1. 找到目标字符串的末尾位置,即\0位置
while (*destination != '\0')
{
destination++;
}
//拷贝
while (*destination++ = *source++)
{
NULL;
}
return dest_start;
}
代码测试
总结
本篇文章介绍了c语言<string.h>头文件中的库函数,对strlen()、strcpy()、strcmp()、strcat()四个函数进行介绍以及展示了如何使用它们,最后,为了加深对这三个函数的理解,分别模拟实现这三个函数。