那些进阶的C语言函数

目录

1.字符串的进阶函数

2.内存的进阶函数


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

这个函数是查看错误信息的,我们只需要在函数后面输入一个常数值,就可以知道错误信息了

strerror ( errno )就这样就可以用了,这里的errno是存储错误信息的全局变量使用这个函数之前要引用头文件<errno.h>

 1.6 strtok

这个函数是用来更改字符串中的分隔符的

 这个函数会在strToken中寻找有没有strDelimit,如果有,把这个位置置位\0,然后返回最前面

注意:这个函数一次只能操作一个分隔符,如果想操作多个,要用到循环,在循环内部函数传参的时候strToken要传NULL才可以

如果strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。否则,strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。也就是上次置为\0的位置

注意:

strtoken 函数找到 str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
strtoken 函数会改变被操作的字符串,所以在使用 strtoken 函数切分的字符串一般都是临时拷贝的内容
并且可修改。)
感兴趣可以用这段代码来看看
#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

注意,是以字节位单位进行设置的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值