C语言处理字符串的十个函数(附带大量实例)
在 C语言中,字符串是以 \0
(空字符)结尾的字符数组,用于表示文本数据。
为了方便处理字符串,C语言标准库提供了丰富的字符串处理函数,定义在 <string.h>
头文件中,这些函数可以帮助我们完成字符串的复制、比较、连接、查找等操作。
阅读本文前,读者需搞清楚 C语言字符数组和字符串的基本用法。接下来,我们将直接深入讲解常见的字符串处理函数,并通过大量实例帮助你掌握它们。
C语言常用的字符串处理函数
C语言的字符串处理函数主要集中在 <string.h>
头文件中,使用这些函数前必须包含该头文件。
字符串处理函数操作的对象通常是字符串(以 \0
结尾的字符数组),它们极大地方便了文本处理任务。
以下是我们将要讲解的主要函数:
-
strlen()
:计算字符串长度 -
strcpy()
和strncpy()
:复制字符串 -
strcat()
和strncat()
:连接字符串 -
strcmp()
和strncmp()
:比较字符串 -
strchr()
和strrchr()
:查找字符 -
strstr()
:查找子字符串
接下来,我们将逐一详细讲解这些函数。
1、strlen()
计算字符串长度
strlen() 函数的原型如下:
size_t strlen(const char *str);
-
str
:要计算长度的字符串。 -
返回值:字符串的长度(不包括
\0
),类型为size_t
(无符号整数)。
例如:
#include <stdio.h> #include <string.h> int main() { char str[] = "hello"; size_t len = strlen(str); printf("字符串长度:%zu\n", len); return 0; }
输出结果:
字符串长度:5
strlen()
只计算实际字符数,不包括末尾的 \0
。如果传入的不是以 \0
结尾的字符数组,结果将是未定义的。
2、strcpy()
和 strncpy()
复制字符串
1)strcpy()
strcpy()
将源字符串(包括 \0
)复制到目标字符串。
char *strcpy(char *dest, const char *src);
-
dest
:目标字符数组。 -
src
:源字符串。 -
返回值:指向
dest
的指针。
示例:
#include <stdio.h> #include <string.h> int main() { char src[] = "hello"; char dest[10]; strcpy(dest, src); printf("复制后的字符串:%s\n", dest); return 0; }
输出结果:
复制后的字符串:hello
注意:dest
必须有足够的空间容纳 src
,否则会引发缓冲区溢出。
2)strncpy()
strncpy
是更安全的版本,允许指定复制的最大字符数。
char *strncpy(char *dest, const char *src, size_t n);
-
n
:最多复制的字符数。
示例:
#include <stdio.h> #include <string.h> int main() { char src[] = "hello world"; char dest[6]; strncpy(dest, src, 5); // 只复制前 5 个字符 dest[5] = '\0'; // 手动添加结束符 printf("复制后的字符串:%s\n", dest); return 0; }
输出结果:
复制后的字符串:hello
注意:strncpy
不会自动添加 \0
,如果 n
小于 src
长度,需手动补上。
3、strcat()
和 strncat()
连接字符串
1)strcat()
strcat()
将源字符串追加到目标字符串末尾。
char *strcat(char *dest, const char *src);
示例:
#include <stdio.h> #include <string.h> int main() { char dest[20] = "hello"; char src[] = " world"; strcat(dest, src); printf("连接后的字符串:%s\n", dest); return 0; }
输出结果:
连接后的字符串:hello world
2) strncat()
strncat()
限制追加的字符数。
char *strncat(char *dest, const char *src, size_t n);
示例:
#include <stdio.h> #include <string.h> int main() { char dest[20] = "hello"; char src[] = " world"; strncat(dest, src, 3); // 只追加 " wo" printf("连接后的字符串:%s\n", dest); return 0; }
输出结果:
连接后的字符串:hello wo
strncat
会自动添加 \0
,无需手动补齐。
4、strcmp()
和 strncmp()
比较字符串
1)strcmp()
strcmp
按字典序比较两个字符串。
int strcmp(const char *str1, const char *str2);
-
返回值:
- 0:两字符串相等
-
正数:
str1
大于str2
-
负数:
str1
小于str2
示例:
#include <stdio.h> #include <string.h> int main() { char str1[] = "apple"; char str2[] = "banana"; int result = strcmp(str1, str2); if (result < 0) printf("str1 < str2\n"); else if (result > 0) printf("str1 > str2\n"); else printf("str1 == str2\n"); return 0; }
输出结果:
str1 < str2
2)strncmp()
strncmp()
只比较前 n
个字符。
#include <stdio.h> #include <string.h> int main() { char str1[] = "apple"; char str2[] = "apricot"; int result = strncmp(str1, str2, 2); if (result == 0) printf("前 2 个字符相等\n"); return 0; }
输出结果:
前 2 个字符相等
5、strchr()
和 strrchr()
查找字符
1)strchr()
strchr()
查找字符在字符串中第一次出现的位置。
char *strchr(const char *str, int c);
-
c
:要查找的字符(传入 int,但实际按 char 处理)。 -
返回值:指向首次出现位置的指针,或
NULL
(未找到)。
示例:
#include <stdio.h> #include <string.h> int main() { char str[] = "hello"; char *pos = strchr(str, 'l'); if (pos) printf("'l' 首次出现位置:%ld\n", pos - str); return 0; }
输出结果:
'l' 首次出现位置:2
2)strrchr()
strrchr()
查找最后一次出现的位置。
#include <stdio.h> #include <string.h> int main() { char str[] = "hello"; char *pos = strrchr(str, 'l'); if (pos) printf("'l' 最后出现位置:%ld\n", pos - str); return 0; }
输出结果:
'l' 最后出现位置:3
6、strstr()
查找子字符串
strstr()
查找子字符串首次出现的位置。
char *strstr(const char *haystack, const char *needle);
-
haystack
:被查找的字符串。 -
needle
:要查找的子字符串。
示例:
#include <stdio.h> #include <string.h> int main() { char str[] = "hello world"; char *pos = strstr(str, "world"); if (pos) printf("子字符串位置:%ld\n", pos - str); return 0; }
输出结果:
子字符串位置:6
函数对比表格
函数 | 功能 | 返回值 | 注意事项 |
---|---|---|---|
strlen() |
计算长度 |
size_t |
不含 \0 |
strcpy() |
复制字符串 |
char * |
可能溢出 |
strncpy() |
有限复制 |
char * |
需手动加 \0 |
strcat() |
连接字符串 |
char * |
需确保空间 |
strcmp() |
比较字符串 |
int |
字典序 |
注意事项
-
头文件:始终包含
<string.h>
。 -
安全性:避免缓冲区溢出,优先使用
strncpy
和strncat
。 -
空指针:查找函数返回
NULL
时需检查。
总结
C语言标准库提供了多个处理字符串的函数,为文本操作提供了强大支持。
阅读完本文,你已经掌握了 C 语言处理字符串的常用函数,建议在实践中结合这些函数编写程序,如字符串分割或搜索,以加深理解。