当前位置:   article > 正文

常用的字符串函数(<string.h>库函数)_列举5个常用的字符串函数

列举5个常用的字符串函数


前言

字符串是我们C语言学习过程中的老面孔了,那么关于字符串的常用函数有哪些呢?今天让我来列举一下。


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

1、 strlen()函数

size_t strlen( const char *string );

size_t等价于unsigned int,这意味着字符串的长度不可能为负数,但同时也导致两个字符串的长度相减也不可能为负数;
参数为字符数组中某元素地址,计算从这个字符到空白符’\0’之间的字符大小(包含起始字符但不包含空白符);

2、strcpy函数

char *strcpy( char *strDestination, const char *strSource )

将strSource 指针指向的字符串复制到目标数组strDestination中,包括终止空字符(并在该点停止)。

int main()
{
	char arr1[] = "I LOVE C!";
	char arr2[20] = "################";
	strcpy(arr2,arr1); -------将数组arr1赋给数组arr2;
	printf("%s", arr2);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

输出结果为:I LOVE C!
strcpy()函数的返回值为目标数组的地址,那么上述代码也可以这样写:

int main()
{
	char arr1[] = "I LOVE C!";
	char arr2[20] = "################";
		printf("%s", strcpy(arr2, arr1));
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用注意事项:
1、源字符串src必须以’\0’结束
2、strcpy()会将源字符串中的’\0’拷贝到目标空间
3、目标空间必须足够大,以确保能存放源字符串
4、目标空间必须可变(不能是常量字符串)

3、strcat()函数

char *strcat( char *strDestination, const char *strSource );

strcat函数把strSource指向的字符串追加到strDestination指向的字符串之后,追加的位置是从strDestination指向的字符串的‘\0’开始,并在strSource指向的字符串的‘\0’结束(两个‘\0’都包含);
注意事项:
1、源字符串必须以’\0’结束。
2、目标空间必须有足够的大,能容纳下源字符串的内容。目标空间必须可修改。
3、字符串不能自己追加自己;

4、strcmp()函数

strcmp( const char *str1, const char *str2 );

向strcmp()函数中传入两个字符串(记为str1,str2),传入之后,通过把str1的各字母(‘\0’前的)的ASCII码值和str2的各字母的ASCII码值进行比较。当遇到第一对不相同的char1和char2时,若char1>char2则返回正数,若char1<char2则返回负数;如果str1和str2的每一个字符都相同,那么返回0;(注:VS编译器下分别返回1,-1,0)

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

1、strncpy()函数

char *strncpy( char *strDestination,const char *strSource, size_t num );

从源字符串拷贝num个字符到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加’\0’,直到num个。

2、strncat()函数

char *strncat( char *strDestination, const char *strSource, size_t
num );

在目标字符串后追加源字符串的前num个字符;
如果num超过源字符串的长度,那么在整个源字符串追加完成后,便不再追加任何字符了;(这一点和strncpy不同)
利用strncat可以在目标字符串后追加目标字符串(即可以自己追加自己,实现strcat()实现不了的功能);

3、strncmp()函数

int strncmp( const char *string1,const char *string2,size_t num );

将string1和string2的前num个字符进行比较,返回值的规则与strcmp相同;

4、strstr()函数

char *strstr( const char *string, const char *strCharSet );

在string字符串中查找strCharSet,如果strCharSet是string的子字符串,那么函数返回一个指向string字符串中第一个出现strCharSet 的字符串的指针;
如:

char arr1[] = "abcdbc";
char arr2[] = "bc";
char* ret = strstr(arr1,arr2);
printf("%s", ret);
  • 1
  • 2
  • 3
  • 4

输出结果为:bcdbc;
如果字符串中没有出现字符串,则返回空指针(NULL);
如:

char arr1[] = "abcd";
char arr2[] = "e";
char* ret = strstr(arr1,arr2);
printf("%s", ret);
  • 1
  • 2
  • 3
  • 4

输出结果为:(null)
如果strCharSet指向零长度的字符串,则该函数返回字符串。
如:

char arr1[] = "abcd";
char arr2[] = "";
char* ret = strstr(arr1,arr2);
printf("%s", ret);
  • 1
  • 2
  • 3
  • 4

输出结果为:abcd;

5、strtok()函数

char* strtok( char *str, const char *sep )

sep参数是个接收字符串的指针,该指针指向分隔符的字符串集合
第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。strtok函数找到str中的下一个标记,并将其用’\0’结尾,返回一个指向这个标记的指针。
(注:strtok函数会改变被操作的字符串,所以使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。)
strtok函数的第一个参数不为NULL,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
strtok函数第一个参数以外的其余参数为NULL,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
如果字符串中不存在更多的标记,则返回NULL指针。

结合代码讲解:

int main()
{
	char arr[] = "I.LOVE.WYF.";//要分割的数组
	char* sep = ".";//分隔符字符串集合
	char* ret = NULL;//接收strtok的返回值
	char buf[1024] = { 0 };//创建一个临时数组作为拷贝
	strcpy(buf, arr);//把arr拷贝到buf中
	for (ret = strtok(buf, sep); ret != NULL; ret = strtok(NULL, sep))
	{
		printf("%s\n", ret);
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6、strerror()函数

char* strerror( int errnum );

errnum是C语言定义的错误码,每一个错误码对应一种错误的信息,strerror函数负责返回这个错误信息的指针,然后使用者就可以通过printf("%s",strerror( errnum ))打印错误信息的内容;
errno是一个全局的错误码变量,当C语言的库函数在执行过程中发生错误,就会把对应的错误码赋值到errno中;
使用案例:

int main()
{
	FILE* pFile = fopen("unexist.ent", "r"); 
	if (pFile == NULL)
		printf("Error opening file unexist.ent: %s \n", strerror(errno)); 
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

总结

以上总结了两大类字符串函数,各有优缺利弊;
在未来的练习中多多使用,才能让它们把作用发挥到淋漓尽致!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/71503
推荐阅读
相关标签
  

闽ICP备14008679号