文章目录
1.1strlen求字符串长度
strlen是一个库函数所包含的头文件为#include<string.h>,这里我们可以在C plusplus上找到strlen所包含的头文件以及strlen传入后函数所生成的一个参数
这个函数返回的类型为siz_t的值为无符号整形为正数(>=0)的数,参数为const char* str,你需要传入一个字符类型相关的数据来求出从起始地址->'\0’所有符号的长度
结果为
因为传入的是arr,arr为你的首元素地址作为参数传入到strlen函数中
因为字符串中大部分都有所对应的ASCII
ASCII值地址
1.2模拟实现strlen函数
如何模拟strlen求出字符串的长度,首先我们肯定需要知道strlen这个函数所需要的函数参数以及返回类型
如图所示,strlen的返回类型为size_t,它的参数是const char* str
我们先写代码来理解他的含义
#include<stdio.h>
#include<assert.h>
size_t My_strlen(const char* str)
//const为char*类型的指针指向的变量无法进行修改
{
assert(str); //==assert(str!=NULL)不为空指针
size_t count = 0;//数量从0开始返回count类型
while (*str++)//这里进去之后再去指向数组中第二个地址
{
count++ ;//数量++
}
return count;
}
int main()
{
char arr[] = {"abcdef"};
size_t rec = My_strlen(arr);
printf("%zu",rec);
return 0;
}
2.1 strcpy函数
strcpy也是一个经常使用到的函数,cpy顾名思义就是拷贝的意思,他就是将一个字符串拷贝到数组中(你的数组需要将字符串容纳进去)
它的返回类型也是char* 而参数第一个destination为目的地,将你想要考入的数据放到参数1中,source为源头,至于为什么第二个参数有const第一个没有,因为第二个是你需要将源头的内容拷贝到目的地,源头肯定不可以修改,而目的地这时候已经被修改,参数1不需要加const
可以看到已经将str中的字符串拷贝到arr中(如果arr中有字符的情况下,目的地的字符会被源头的字符覆盖掉,源头字符直到\0停止)
2.2 模拟实现strcpy
#include<stdio.h>
#include<assert.h>
char* My_strcpy(char* dest,const char*s)
{
char *ret = dest;
assert(s);
while (*s)
{
*dest++= *s++;//将s的字符放到dest中++寻找下个字符
}
*dest = *s;//因为while循环\0为0终止循环,最后在拷贝\0,
return ret;//返回首元素的地址
}
int main()
{
char arr[30] = {"abcedeadwadwadada"};
char str[15] = {"Hello, World"};
My_strcpy(arr,str);
printf("%s", arr);
return 0;
}
3.1strcat函数
strcat函数介绍为:将源字符串的副本追加到目标字符串,destination中的结束null字符被source的第一个字符覆盖,并且在destination中由两者串联形成的新字符串的末尾包含一个空字符。
目的地和源头不得重叠。
这里的意思就是目的地中的第一个\0会被第一个字符覆盖然后继续覆盖,当源头的字符串覆盖完成生成一个新的\0
这里我们可以看到arr1中追加了arr2中的字符。
3.2模拟实现strcat
这里的传入参数的值和上面的步骤相同可以看一下上面
代码实现
#include<stdio.h>
#include<assert.h>
char* My_strcat(char* dest,const char* src)
{
char *ret = dest;
assert(dest && src);
// char* rec = *dest;
while (*dest!='\0')
//首先因为我们知道了目的地的值第一个\0开始开始覆盖的,所以我们需要得到找到\0
{
dest++;//这里找到第一个\0
}
while(*dest++ = *src++)//这里我们开始从第一个\0开始被src覆盖
{
; // *dest++=*src++//也可以这么写
}
return ret;
}
int main()
{
char arr1[30] = {"abcde"};
char arr2[10] = {"abcd"};
My_strcat(arr1,arr2);
printf("%s", arr1);
return 0;
}
标签:arr,dest,strcat,char,++,strcpy,strlen
From: https://blog.csdn.net/weixin_60489641/article/details/141037755