行业知识
【C语言】字符串函数
目录
前言
一、求字符串长度的函数
1.1 ❥ strlen
二、长度不受限制的字符串函数
2.1 ❥ strcpy
2.1.1 strcpy的模拟实现
2.2 ❥ strcat
2.2.1 strcat的模拟实现
2.2.2 字符串自己追加自己问题
2.3 ❥ strcmp
2.3.1 strcmp的模拟实现
三、长度受限制的字符串函数
3.1 ❥ strncpy
3.2 ❥ strncat
3.3 ❥ strncmp
四、字符串查找
4.1 ❥ strstr
4.1.1 strstr的模拟实现
4.2 ❥ strtok
五、错误信息报告
5.1 ❥ strerror
5.2 ❥ perror
前言
本节重点介绍处理字符串的库函数的使用和注意事项。
一、求字符串长度的函数
1.1 ❥ strlen
函数原型如下:
size_t strlen ( const char * str );
strlen函数:求字符串长度的函数
size_t: unsigned int 即无符号整型
注意事项
- 字符串是以'
- strlen的使用需要包含头文件:#include '作为结束的标志,strlen返回的是字符串'
- 参数指向的字符串必须以'
- strcmp的使用需要包含头文件:#include '结尾'之前出现的字符个数(不包括'
- 比较的是字符的ASCII值。
2.3.1 strcmp的模拟实现
的ASCII最小。 ')
三、长度受限制的字符串函数
我们看下面代码:
输出">"的原因:因为strlen的返回值是一个size_t类型的,也就是无符号的整形。
可以强制转换成int,这样就会输出"");}else if (ret == 0){printf("=");}return 0;}
运行结果如下图所示:
说明比较的是该字符的ASCII值。
返回值是int的原因是:
第一个字符串0
注意事项
3.1 ❥ strncpy
补充如下图:
#include #include int main(){char arr1[] = "abcdefg";char arr2[] = "hello world";strncpy(arr1, arr2, 5);printf("%s", arr1);return 0;} #include #include #include int my_strcmp(const char* str1, const char* str2){int ret = 0;assert(str1 != NULL);assert(str2 != NULL);while (*str1 == *str2){if (*str1 == '\0'){return 0;}str1++;str2++;}return *str1 - *str2;}int main(){char arr1[]= "abcdef";char arr2[] = "abcdg";int ret = my_strcmp(arr1, arr2);if (ret 3.2 ❥ strncat
char * strncpy ( char * destination, const char * source, size_t num );
strncpy函数:字符串拷贝受限制的函数。
拷贝num个字符从源字符串到目标空间。
代码如下:
#include #include int main(){char arr1[20] = "hello ";char arr2[] = "summer";strncat(arr1, arr2, 5);printf("%s", arr1);return 0;} 运行结果下图所示:
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后面追加\0,直到num个。
代码如下图所示:
运行结果如下图所示:
注意'\0'的作用
代码如下:
运行结构如下图所示:
#include #include int main(){char arr1[20] = "hello ";char arr2[] = "hh";strncat(arr1, arr2, 5);printf("%s", arr1);return 0;} #include #include int main(){char arr1[20] = "helloxxxxxxxx";char arr2[] = "world";strncat(arr1, arr2, 5);printf("%s", arr1);return 0;} 3.3 ❥ strncmp
#include #include int main(){char arr1[] = "abcdef";char arr2[] = "abcq";int ret = strncmp(arr1, arr2,4);printf("%d\n", ret);if (ret > 0){printf(">");}else if (ret char * strncat ( char * destination, const char * source, size_t num );
strncat函数:长度受限制的字符串追加函数
将source指向的字符串的前num个字符追加到destination指向的字符串末尾,再追加一个'\0'字符。
代码如下:
运行结果如下图所示:
调试结果如下图所示:
注意:arr1后要给定数组的大小,不给定就会由于初始化了6个,追加空间不够而报错。
如果source指向的字符串的长度小于num的时候,只会将字符串中到\0的内容追加到destination指向的字符串末尾。
代码如下所示:
soucre字符串是否给自己追加'\0'?我们来测试一下,代码如下:
因为\0是字符串结束的标志,此处追加5个字符,world在56789的位置,如果追加上一个\0,那么[10]的位置就是\0
从上图可看出,确实source自己给自己追加了 \0
int strncmp ( const char * str1, const char * str2, size_t num );
strncmp函数:比较两个字符串内容是否相等(长度受限制)
比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束。大的字符所在的字符串大于另外一个。如果num个字符都相等,就返回0。
代码如下:
上一篇:监控怎么存储在服务器上?