前言
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。
字符串常量 适用于那些对它不做修改的字符串函数。
C语言中常用的字符串函数有:
1、求字符串长度
strlen
2、长度不受限制的字符串函数
strcpy 、strcat 、strcmp
3、长度受限制的字符串函数介绍
strncpy 、strncat 、strncmp
4、字符串查找
strstr 、strtok
5、错误信息报告
strerror
6、字符操作
内存操作函数: memcpy 、memmove 、memset 、memcmp
提示:以下是本篇文章正文内容,下面案例可供参考
一、函数介绍
1.1 strlen
size_t strlen ( const char * str );
该函数用于计算某字符串的长度,即字符串中字符个数。
- 字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。
- 参数指向的字符串必须要以 ‘\0’ 结束,否则会返回随机值。
- 注意函数的返回值为size_t,是无符号的( 易错 )。
- 注意函数的参数时char*类型,故需传入指针或者地址。
使用示例:
int main()
{
char arr[] = "china";
char* pa = "people";
printf("%d\n", strlen(arr));
printf("%d\n", strlen(pa));
return 0;
}
易错示例:
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if (strlen(str2) - strlen(str1) > 0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
此代码明显是str2<str1,但是使用库函数还是会出现str2>str1,这是因为strlen函数的返回值是无符号型。虽然strlen(str2) - strlen(str1)得到的结果是-3,但其类型还是无符号类型,所以计算机在解读时不会注意到它的符号位,而是把-3解读成一个很大的正数,导致这里出现错误!
1.2 strcpy
char* strcpy(char * destination, const char * source );
该函数用于复制字符串。将source字符串的内容复制到destination中。其返回值是目标空间原本的起始地址。
注意,即使源字符串短于目标字符串,也会直接全覆盖掉目标字符串。
- 源字符串必须以 ‘\0’ 结束。
- 会将源字符串中的 ‘\0’ 拷贝到目标空间。
- 目标空间必须足够大,以确保能存放源字符串。
- 目标空间必须可变。
使用示例:
int main()
{
char arr1[20] = " ";
char* arr2 = "hello";
strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
1.3 strcat
char * strcat ( char * destination, const char * source );
该函数用以字符串追加。将源字符串的内容追加到目标字符串后面。其返回值是目标空间原本的起始地址。
- 源字符串必须以 ‘\0’ 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
- 字符串自己给自己追加,如何?
是不可以给自己追加的!因为自己给自己追加时会把结束标志’\0’覆盖掉,找不到结束标志,程序将进入死循环。
使用示例:
int main()
{
char arr1[20] = "hello";
char* arr2 = " world";
strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
1.4 strcmp
int strcmp ( const char * str1, const char * str2 );
此函数用于比较两个字符串大小。比较时从第一个字符开始比较,若第一个字符相同则比较第二个字符,依次往后,直到遇见不相等的字符。如果最后一个字符即两个字符串的结束标志’\0’比完还相等,就说两个字符串相等。
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
- 那么如何判断两个字符串?
使用示例:
int main()
{
char ch1[] = "abcdef";
char* ch2 = "abcdff";
if (strcmp(ch1, ch2) > 0)
{
printf("ch1 > ch2\n");
}
else printf("ch1 <= ch2\n");
}
1.5 长度受限制的字符串函数strncpy、strncat、strncmp
前面提到的几个strcpy、strcat、strcmp函数使用时无需考虑字符串长度。那么如果我们需要指定复制、追加、比较时字符串的某几位该如何呢?strn系列字符串函数应运而生。下面介绍这三个字符串函数的使用:
1.5.1 strncpy
char * strncpy ( char * destination, const char * source, size_t num );
该函数用以拷贝num个字符从源字符串到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加\0,直到num个。
使用举例:
int main()
{
char des[] = "abcdef";
char*</