前言
我们开始学习C语言时不可能避开字符,为了更好的使用字符和字符串我们就想要利用C语言里的库函数,下面让我来解析说明C语言中关于它们的库函数(strlen、strcpy、strcat、strcmp、strncpy、strncat、strncmp、strstr)。
strlen(计算字符串的长度)
首先我们要想使用strlen()函数就得知道它的组成成分(如图下)。
size_t strlen ( const char * str );
返回类型 函数名 形参类型
int main()
{
char ch1[] = "abcdefg";//创建一个字符串
char ch2[] = "abc\0defg";//创建一个字符串
char ch3[] = {'a','b','c','d'};//创建一个字符串数组
size_t ret1 = strlen(ch1);//用一个整形变量来接收strlen()函数的返回值
size_t ret2 = strlen(ch2);//用一个整形变量来接收strlen()函数的返回值
size_t ret3 = strlen(ch3);//用一个整形变量来接收strlen()函数的返回值
printf("%d %d %d\n",ret1,ret2,ret3);//打印
return 0;
}
这里我们就可以得到字符串的长度了。
但是注意:strlen()函数遇到'\0'就会停下,直接返回。同理,若strlen()函数遇不到'\0'就会一直执行下去,直到遇到'\0'为止。(ret1 == 7、ret2==3、ret3为随机值)
strcpy和strncpy(复制字符串)
strcpy()函数和strncpy()函数的组成成分(如图下)
char * strcpy ( char * destination, const char * source );
返回类型 函数名 形参类型 形参类型
char * strncpy ( char * destination, const char * source, size_t num );
返回类型 函数名 形参类型 形参类型 形参类型
int main()
{
char ch1[] = "abcdefg";//创建一个字符串
char ch2[20] = { 0 }; //创建一个空字符数组
char ch3[] = "abcdefg";//创建一个字符串
char ch4[20] = { 0 }; //创建一个空字符数组
strcpy( ch2 , ch1);//将ch1的字符串复制到ch2中
要粘贴的数组名 要复制的数组名
strncpy( ch4 , ch3 , 4 );//将ch3的前4的字符复制到ch3中
要粘贴的数组名 要复制的数组名 要复制的字符个数
printf("%s %s\n",ch2,ch4;//打印
return 0;
}
strncpy()函数比strcpy()函数多了一个参数,它是用来限制复制字符串的字符个数。
打印结果:abcdefg abcd
strcat和strncat(链接字符串)
strcat()函数和strncat()函数的组成成分(如图下)
char * strcat ( char * destination, const char * source );
返回类型 函数名 形参类型 形参类型
char * strncat ( char * destination, const char * source, size_t num );
返回类型 函数名 形参类型 形参类型 形参类型
int main()
{
char ch1[] = "abcd"; //创建一个字符串
char ch2[] = "efg"; //创建一个字符串
char ch3[] = "abcd"; //创建一个字符串
char ch4[] = "efg"; //创建一个字符串
strcat( ch1 , ch2);//将ch1的字符串复制到ch2中
要被链接的数组名 要链接的数组名
strncat( ch3 , ch4 , 2 );//将ch3的前4的字符复制到ch3中
要链接的数组名 要链接的数组名 要链接的字符个数
printf("%s %s\n",ch1,ch3);//打印
return 0;
}
strncnat()函数比strcat()函数多了一个参数,它是用来限制链接字符串的字符个数。
打印结果:abcdefg abcdef
strcmp和strncmp(字符串大小的比较)
strcmp()函数和strncmp()函数的组成成分(如图下)
int strcmp ( const char * str1, const char * str2 );
返回类型 函数名 形参类型 形参类型
int strncmp ( const char * str1, const char * str2, size_t num );
返回类型 函数名 形参类型 形参类型 形参类型
int main()
{
char ch1[] = "abcdefg";//创建一个字符串
char ch2[] = "abcdz"; //创建一个字符串
int ret1 = strcmp(ch1,ch2);//用一个整形变量来接收strcmp()函数的返回值
int ret2 = strcmp(ch1,ch2,4);//用一个整形变量来接收strncmp()函数的返回值
printf("%d %d\n",ret1,ret2);//打印
return 0;
}
在strcmp()函数和strncmp()函数中,函数是一个一个字符比较大小的,若ch1的字符比ch2的字符大返回1,相等返回0,小返回-1。
注意:该两个函数是比较大小的,不是比较长度的。
strncmp()函数比strcmp()函数多了一个参数,它是用来限制比较字符串的字符个数。
打印结果:-1 0
strstr(寻找字符串)
strstr()函数的组成成分(如图下)
const char * strstr ( const char * str1, const char * str2 );
返回类型 函数名 形参类型 形参类型
或者 char * strstr ( char * str1, const char * str2 );
int main()
{
char ch1[] = "abcdefg";//创建一个字符串
char ch2[] = "bcd"; //创建一个字符串
char ch3[] = "bcz"; //创建一个字符串
char* ret1 = strstr(ch1,ch2);
char* ret2 = strstr(ch1,ch3);
printf("%s %s\n",ret1,ret2);打印
return 0;
}
在strstr()函数 中,是在字符串ch1中寻找是否有跟字符串ch2完全相同的子字符串,若有则返回ch1中相同字符的地址,若没有,则返回空指针NULL。
打印结果:bcdefg NULL