👦个人主页:@Weraphael
✍🏻作者简介:目前是C语言学习者
✈️专栏:C语言航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关
前言
- 以下所以库函数的查阅都在cplusplus网站
- 以下字符串函数在使用前都要加上#include <string.h>
目录
- 前言
- 1.strlen
- (1)strlen函数介绍
- (2)strlen函数用法
- (3)strlen函数的注意事项
- (4)strlen函数的模拟实现(三种)
- 2.strcpy
- (1)strcpy函数介绍
- (2)strcpy函数用法
- (3)strcpy函数的注意事项
- (4)strcpy函数的模拟实现
- 3.strcat
- (1)strcat函数介绍
- (2)strcat函数用法
- (3)strcat函数的注意事项
- (4)strcat函数的模拟实现
- 4.strcmp
- (1)strcmp函数介绍
- (2)strcmp函数用法
- (3)strcmp函数的模拟实现
- 5.strncpy
- (1)strncpy函数介绍
- (2)strncpy函数用法
- (3)strncpy函数的注意事项
- (4)strncpy函数的模拟实现
- 6.strncat
- (2)strncat函数用法
- (3)strncat函数的注意事项
- (4)strncat函数的模拟实现
- 7.strncmp
- (1)strncmp函数介绍
- (2)strncmp函数用法
- 8.strstr
- (2)strstr函数用法
- (3)strstr函数的模拟实现
- 9.strtok
- strtok函数介绍及用法
- 10.strerror
- (1)strerror函数介绍
- (2)strerror的用途
- (3) 类似函数perror
1.strlen
(1)strlen函数介绍
功能:计算的是字符串中’\0’前面出现的字符个数(不包含’\0’)
(2)strlen函数用法
(3)strlen函数的注意事项
- 参数指向的字符串必须要以’\0’结束
- 注意函数的返回值是size_t,是无符号的;因为字符串的长度不可能为负数
(4)strlen函数的模拟实现(三种)
①计数器count
②递归法
详细解析请参考《递归篇》 点我跳转
③指针 - 指针
详情解析请参考《初识指针》点我跳转
2.strcpy
(1)strcpy函数介绍
功能:拷贝字符串
(2)strcpy函数用法
(3)strcpy函数的注意事项
- 源字符串必须以‘\0’结束
- 目标空间必须足够大,以确保能放下源字符串
- 目标空间必须可变,不能用const修饰
(4)strcpy函数的模拟实现
3.strcat
(1)strcat函数介绍
功能:在字符串后追加字符串
(2)strcat函数用法
(3)strcat函数的注意事项
- 源字符串必须以‘\0’结束
- 目标空间必须要以’\0’结束
- 目标空间必须足够大,能容纳源字符串的内容
- 保证目标空间可修改,不能加const修饰
- strcat不能自己给自己追加
解释:
字符串追加是从目标空间的’\0’开始追加的,追加时会把’\0’覆盖掉,这样字符串就没有结束标志,导致覆盖\0后,源字符串没有以\0结尾,导致死循环
(4)strcat函数的模拟实现
4.strcmp
(1)strcmp函数介绍
功能:比较字符串大小(字典序)
(2)strcmp函数用法
(3)strcmp函数的模拟实现
5.strncpy
(1)strncpy函数介绍
- strncpy与strcpy的功能相同,都是拷贝字符串
- 不同的是:strncpy可以控制拷贝字符串的长度
(2)strncpy函数用法
(3)strncpy函数的注意事项
- 因为受拷贝长度限制,strncpy不会拷贝源字符串的’\0’(看用法),而strcpy会拷贝源字符的’\0’
- 如果源字符串的长度小于num,则拷贝完源字符串之后,它会在目标空间后面自动追加’\0’,直到num个
(4)strncpy函数的模拟实现
6.strncat
- strncat与strcat的功能相同,都是字符串追加
- 不同的是:strncat可以=控制拷贝字符串的长度
(2)strncat函数用法
(3)strncat函数的注意事项
- strncat在目标字符数组追加完之后会自动补’\0’,所以它可以自己追加自己
(4)strncat函数的模拟实现
7.strncmp
(1)strncmp函数介绍
- 与strcmp的功能相同,都是字符串比较
- 不同的是:strncmp可以控制字符串比较的长度
(2)strncmp函数用法
8.strstr
功能:从str1中找str2(找子串)
(2)strstr函数用法
(3)strstr函数的模拟实现
【分析】
情况1:
情况2:
【代码实现】
#include <stdio.h>
#include <string.h>
char* my_strstr(const char* str1, const char* str2)
{
//当str2为空串,直接返回str1的地址
if (*str2 == '\0')
{
return str1;
}
//用s1和s2代替str1和str2来遍历
const char* s1 = str1;
const char* s2 = str2;
//p记录str1的位置
const char* p = str1;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
//*s2=\0,说明找到子串了
if (*s2 == '\0')
{
return p;
}
//循环中s1和s2不相等,让p++找下一个位置
p++;
}
//当*p = ‘\0’,说明p遍历完整个数组都没找到子串
return NULL;
}
int main()
{
char arr1[] = "abbbbcdef";
char arr2[] = "\0";
char* res = my_strstr(arr1, arr2);//从arr1中找arr2
if (res == NULL)
{
printf("找不到\n");
}
else
{
printf("找到了:%s\n", res);
}
return 0;
}
9.strtok
strtok函数介绍及用法
功能:分割字符串
【解析】
- 如上图,delimiters参数是一个字符串,它是分割符的字符集合
- str是被切割的字符串,不能用const修饰
- 函数返回类型是
char*
strtok的作用
- strtok找到str中的分割符,并把分割符变成\0,再返回一个指向这个标记的起始地址
- ①strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
②strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
【完整版】
10.strerror
(1)strerror函数介绍
功能:返回错误码所对应的错误信息
- C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个全局变量,这个变量是errno
这些错误码通常是一些数字:1,2,3,4,5…
(2)strerror的用途
- fopen函数简介
【用法实现】
(3) 类似函数perror
功能:直接打印错误信息,在打印错误信息前,会先打印自定义的信息
【用法展现】