赞
踩
字符串是我们C语言学习过程中的老面孔了,那么关于字符串的常用函数有哪些呢?今天让我来列举一下。
size_t strlen( const char *string );
size_t等价于unsigned int,这意味着字符串的长度不可能为负数,但同时也导致两个字符串的长度相减也不可能为负数;
参数为字符数组中某元素地址,计算从这个字符到空白符’\0’之间的字符大小(包含起始字符但不包含空白符);
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;
}
输出结果为:I LOVE C!
strcpy()函数的返回值为目标数组的地址,那么上述代码也可以这样写:
int main()
{
char arr1[] = "I LOVE C!";
char arr2[20] = "################";
printf("%s", strcpy(arr2, arr1));
return 0;
}
使用注意事项:
1、源字符串src必须以’\0’结束
2、strcpy()会将源字符串中的’\0’拷贝到目标空间
3、目标空间必须足够大,以确保能存放源字符串
4、目标空间必须可变(不能是常量字符串)
char *strcat( char *strDestination, const char *strSource );
strcat函数把strSource指向的字符串追加到strDestination指向的字符串之后,追加的位置是从strDestination指向的字符串的‘\0’开始,并在strSource指向的字符串的‘\0’结束(两个‘\0’都包含);
注意事项:
1、源字符串必须以’\0’结束。
2、目标空间必须有足够的大,能容纳下源字符串的内容。目标空间必须可修改。
3、字符串不能自己追加自己;
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)
char *strncpy( char *strDestination,const char *strSource, size_t num );
从源字符串拷贝num个字符到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加’\0’,直到num个。
char *strncat( char *strDestination, const char *strSource, size_t
num );
在目标字符串后追加源字符串的前num个字符;
如果num超过源字符串的长度,那么在整个源字符串追加完成后,便不再追加任何字符了;(这一点和strncpy不同)
利用strncat可以在目标字符串后追加目标字符串(即可以自己追加自己,实现strcat()实现不了的功能);
int strncmp( const char *string1,const char *string2,size_t num );
将string1和string2的前num个字符进行比较,返回值的规则与strcmp相同;
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);
输出结果为:bcdbc;
如果字符串中没有出现字符串,则返回空指针(NULL);
如:
char arr1[] = "abcd";
char arr2[] = "e";
char* ret = strstr(arr1,arr2);
printf("%s", ret);
输出结果为:(null)
如果strCharSet指向零长度的字符串,则该函数返回字符串。
如:
char arr1[] = "abcd";
char arr2[] = "";
char* ret = strstr(arr1,arr2);
printf("%s", ret);
输出结果为:abcd;
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;
}
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;
}
以上总结了两大类字符串函数,各有优缺利弊;
在未来的练习中多多使用,才能让它们把作用发挥到淋漓尽致!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。