串连字串
将源字符串的副本追加到目标字符串。目的地中的终止空字符被源的第一个字符覆盖,并且一个空字符被包含在由目的地中的两者连接形成的新字符串的末尾。
目的地和来源不应重叠。
获取字符串长度
返回C字符串str的长度。
C字符串的长度由终止空字符决定:C字符串的长度等于字符串开头和终止空字符之间的字符数(不包括终止空字符本身)
注:图片来源于网站https://cplusplus.com/
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* des,const char*sou)//des为复制的目的地首地址,sou为被复制的字符串首地址
{
//const在这里的作用是防止sou被修改,防止写反
assert(des != NULL);//避免目标地址为空地址
assert(sou != NULL);//避免目标地址为空地址
//assert的作用是检查括号内是否满足条件,若不满足则会报错,终止程序的运行
char* ret = des;//函数最后返回复制结束后的字符串的首地址,后续des指向的地址会改变
//提前创建一个指针存放首地址。
while(*des++=*sou++)//*des++的意思是先解引用,然后使des指向的地址向后移动一位
//先对des和sou解引用,将sou第一个元素赋值给des然后两个指针均向后移动一位
//des的值就是这条语句的值,所以当复制结束遇到‘\0’的时候循环结束
{
;
}//因循环内部不需要任何操作,所以是空语句
return ret;//返回复制完成的字符串的首地址,就是函数的返回值
}
int main()
{
char arr1[] = "123456";//被复制函数
char arr2[200];//复制目的地
printf("%s",my_strcpy(arr2,arr1));//打印复制后的字符串
return 0;
}
#include<stdio.h>
#include<assert.h>
size_t my_strlen(char* arr)//size_t为这里特定的类型
{
assert(arr != NULL);//防止arr为空指针
int longth = 0;//初始长度为0
while(*arr++)//先解引用判断是否为‘\0’,然后将指针后移,指向下一个字符
{
longth++;//统计不为'\0'的个数
}
return longth;//返回字符串长度,不含最后的‘\0’
}
int main()
{
char a[] = "123456789";
printf("%zd",my_strlen);//“%zd”表示输出size_t类型的数据
return 0;
}