C语言 字符串拷贝 2020.10.31
字符串的拷贝有几种写法
代码:
1.简单数组式写法
#include<stdio.h>
void My_strcpy1(char crr[],char arr[])
{
int i;
for (i = 0; arr[i] != '\0'; i++)
{
crr[i] = arr[i];
}
crr[i] = '\0';
}
2.指针位移加解引用型
void My_strcpy2(char drr[], char arr[])
{
int i;
for (i = 0; *(arr + i) != '\0'; i++)
{
*(drr + i) = *(arr + i);
}
*(drr + i) = '\0';
}
3.指针实现
void My_strcpy3(char err[], char arr[])
{
char* p = arr;
char* q = err;
for (p; *p != '\0'; p++, q++)
{
*q = *p;
}
*q = '\0';
}
4.一行代码来完成
void My_strcpy4(char frr[], char arr[])
{
while (*frr++ = *arr++);
}
5.最完整版
char* My_strcpy5(char* des, const char* src)
{
assert(des != NULL && src != NULL); //判断机制防止有错
if (des == NULL || src == NULL)
{
return NULL;
}
char* address = des;//address作用是防止 return的时候 des指向最后了 备份
while (*des++ = *src++);
return address;
}
类型用char*型是为了实现链式表达式。
主函数:
int main()
{
char arr[10] = "abcde";
char src[10] = "abcde";
char crr[10];
char drr[10];
char err[10];
char frr[10];
char des[10];
My_strcpy1(crr, arr);
My_strcpy2(drr, arr);
My_strcpy3(err, arr);
My_strcpy4(frr, arr);
My_strcpy5(des, src);
printf("arr:%s\n",arr);
printf("crr:%s\n",crr);
printf("drr:%s\n", drr);
printf("err:%s\n", err);
printf("frr:%s\n", frr);
printf("des:%s\n", des);
}
运行结果: