目录
1.字符串的进阶函数
我们知道了字符串有strlen,strcpy,strcmp函数其实我们看C语言库就知道还有很多函数,这里我就大概的介绍几种
1.1strncpy
这个函数和strcpy差不多,但是多了一个参数,可以限定拷贝元素的个数
可以看到在底层的代码实现是这样的,所以我们可以传3个参数来使用,并且返回值是char*类型的
这就让我们可以返回目标数组,来进行链式访问
从这可以知道,count就是元素个数
我们来用一段伪代码说明
int main()
{
int arr1[] = "abcdef";
int arr2[5] = {0};
strncpy(arr2,arr1,3);
return 0;
}
这段代码就可以把arr1里的3个元素拷贝到arr2中取,arr2中数据就变成了{abc00}
1.2strncmp
这个函数也和strcmp类似,但是多了个元素限制,可以和上面的代码一样理解
1.3strncat
strcat函数是用来在目标数组中追加元素的,strncat则是在数组后面追加指定个数的元素,也是可以和上面的函数对比理解的
1.4strstr
这个函数就是在字符串里面寻找子串的函数,看看库里面是啥样的
这个其实就是在string中寻找子串strCharSet中的元素,如果查找到了就返回在string中strCharSet的开始位置,如果没找到,就返回空值
1.5strerror
这个函数是查看错误信息的,我们只需要在函数后面输入一个常数值,就可以知道错误信息了
1.6 strtok
这个函数是用来更改字符串中的分隔符的
这个函数会在strToken中寻找有没有strDelimit,如果有,把这个位置置位\0,然后返回最前面
注意:这个函数一次只能操作一个分隔符,如果想操作多个,要用到循环,在循环内部函数传参的时候strToken要传NULL才可以
如果strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。否则,strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。也就是上次置为\0的位置
注意:
#include <stdio.h>
int main()
{
char *p = "ganzhi@abcdef.ghijk";
const char* sep = ".@";
char arr[30];
char *str = NULL;
strcpy(arr, p);//将数据拷贝一份,处理arr数组的内容
for(str=strtok(arr, sep); str != NULL; str=strtok(NULL, sep))
{
printf("%s\n", str);
}
}
2内存的函数
2.1memcpy
这个就是比strncpy更加高级一些,可以操作任何类型的数据了
直接和strcpy一样使用就可以了,但是有一个问题就是不可以在函数传参的时候传同一个字符串中的内容,会导致覆盖,重叠
比如
memcpy(arr1,arr1+2,5);
是错误的
2.2memmove
这个函数是对memcpy的优化,解决了重叠的问题
2.3momcmp
其实就是strncmp的升级版,可以对任何类型的数据进行操作了,可以和上面的一样理解
2.4memset
这个函数就是把dest数组里的count个字节的元素更改成c
注意,是以字节位单位进行设置的