本文我们将学习字符函数与内存操作函数,重点是自己编辑一个函数来实现相关功能,以提高自身的编辑思维与能力
目录
strlen函数
首先让我们了解strlen函数的功能, 测量一个字符串的长度。
#include<stdio.h>
int main()
{
char a[20] = "dadadada";
int an=strlen(a);
printf("%d\n", an);
return 0;
}
我们可以看见a中的“dadadada”是八个字符,理所当然用strlen测量的长度也应该是8,让我们来看一下测试结果
接下来让我们来模拟实现strlen函数
strcpy 和 strnpcy
strcpy函数的功能
将source内的字符串拷贝到destination内
图示代码将a2中的内容拷贝到a1中,再将a1打印
出来,a1中的内容不再是Hello而是World;
接下来让我们模拟strcpy函数的实现
原理很简单,将a2的值一次一次的赋给a1即可。
strncpy呢,是有字符串长度限制的strcpy
strncpy(arr1,arr2,20);
后面的size_t num 是对长度限制 使用方法与strcpy相同
strcat 和 strncat
strcat函数的功能,将source中的字符串加在destination后面;
接下来让我们模拟strcat函数的实现
对p1进行循环查找直到找到'\0';再将p2内容逐一赋值过去即可;
strncat 与strncpy 同理,大家可以自行了解
strcmp 和 strcmp
strcmp是我们常用的一个函数,比较两个字符串长度的大小
让我们先看一下strcmp的使用效果
strcmp返回值类型为整形分别为大于0,等于0,小于0。代表着a1>a2,a1=a2,a1<a2;
接下来让我们模拟实现strcmp
strstr
strstr函数功能是查找子字符串
strstr将子字符串找出来并将其打印出来,strstr返回类型是一个char* 的指针,如果找不到会返回一个空指针。
模拟实现strstr
strtok
strtok函数功能为分割字符串
#include<stdio.h>
#include<string.h>
int main()
{
const char* sep = "@.";
char email[] = "zhangpengwei@bitejiuyeke.com.net";
char cp[40] = { 0 };//"zhangpengwei@bitejiuyeke.com"
strcpy(cp, email);
char* ret = NULL;
for (ret = strtok(cp, sep);
ret != NULL;
ret=strtok(NULL, sep))
{
printf("%s\n", ret);
}
strerror
strerror函数功能为报告错误信息
需要包含<errno.h>
printf("%s",strerror(errno));
一般情况下,这样可以很好的了解自己出错的原因,快速修改代码
memcpy
与strcpy相同的是,memcpy也是把arr2内容拷贝到arr1里面去,但不同的是memcpy拷贝的数据不仅仅只是字符,各种类型数据均可用memcpy实现。
接下来模拟memcpy的实现
与strcpy模拟函数 大同小异 大家可自习研究
memmove
memmove的功能也同样是实现数据的拷贝,与memmove不同的是,它可以在一块空间内进行操作,而memcpy不能在一块空间操作,需要两块独立的空间。
这里的可以改造成
memmove(arr1+3,arr1,20);
其余的与memcpy同理
模拟实现memmove
memset
memset函数功能将数据初始化,全部干为0
memcmp
同理,全部数据类型均可用来比较大小