本文适合有一定C语言基础的同学查看~
基础版
#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//此时*src == '\0'
}
int main()
{
char arr1[20] = "****************";
char arr2[] = "hello c";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
改进版
#include<stdio.h>
void my_strcpy(char* dest, char* src)
{
while (*dest++ = *src++)
{
//当*src == '\0'时,赋给*dest,已完成整个字符串的复制
//此时表达式的结果是'\0','\0'的ASCII码值为0,跳出循环
}
}
int main()
{
char arr1[20] = "****************";
char arr2[] = "hello c";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
最强版
#include<stdio.h>
#include<assert.h>//调用arrert宏时需要用到
char* my_strcpy(char* dest, const char* src)//函数返回类型为char*,以便调用复制后的字符串
{ //函数第二个参数改为const char*类型,表示不可改变*src的内容
char* ret = dest;//拷贝一份,return时调用
//断言
assert(dest != NULL);
assert(src != NULL);//assert括号里的值如果为假,会报错,这样避免l函数参数传入空指针,程序更安全
while (*dest++ = *src++)
{
//当*src == '\0'时,赋给*dest,已完成整个字符串的复制
//此时表达式的结果是'\0','\0'的ASCII码值为0,跳出循环
}
return ret;
}
int main()
{
char arr1[20] = "****************";
char arr2[] = "hello c";
//my_strcpy(arr1, arr2);
printf("%s\n",my_strcpy(arr1,arr2));
return 0;
}
欢迎大家指正~