小工具知识网

当前位置: 首页 > 行业知识 > 【C语言】字符串函数

行业知识

【C语言】字符串函数

2026-10-28 11:02:00 来源:互联网转载

目录

前言

一、求字符串长度的函数

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 即无符号整型

注意事项

  1. 字符串是以'
  2. strlen的使用需要包含头文件:#include
  3. '作为结束的标志,strlen返回的是字符串'
  4. 参数指向的字符串必须以'
  5. strcmp的使用需要包含头文件:#include
  6. '结尾'之前出现的字符个数(不包括'
  7. 比较的是字符的ASCII值。

    2.3.1 strcmp的模拟实现

    的ASCII最小。
  8. ')

    三、长度受限制的字符串函数

我们看下面代码:

输出">"的原因:因为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] = "hello

xxxxxxxx";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。

代码如下:

上一篇:监控怎么存储在服务器上?

下一篇:【C语言】字母转换大小写的三种方法