#include <string.h>
strcpy - string copy字符串拷贝函数
1. 功能实现(不完整)
#include <stdio.h>
#include <string.h>
void my_strcpy(char* dest, char* src)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src; //处理'\0'
}
int main()
{
//strcpy - string copy - 字符串拷贝
char arr1[20] = { 0 };
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
2. 普通优化(防止空指针传入)
在函数内部加一个assert断言,记得包含头文件 #include <assert.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
void my_strcpy(char* dest, char* src)
{
assert(dest && src); //断言 - 条件为假时报错提示
//也可以单独写,如果为NULL则判断为假报错
//assert(dest);
//assert(src);
//也可以写成判断
//assert(dest != NULL);
//assert(src != NULL);
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
}
int main()
{
//strcpy - string copy - 字符串拷贝
char arr1[20] = { 0 };
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
3. 循环优化,同时添加返回值
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char* dest, char* src)
{
assert(dest && src); //断言 - 条件为假时报错提示
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
//strcpy - string copy - 字符串拷贝
char arr1[20] = { 0 };
char arr2[] = "hello";
printf("%s\n", my_strcpy(arr1, arr2)); //链式访问,使用某一函数的返回值作为另一个函数的参数
return 0;
}
4.最终版本(添加const修饰指针保护)
const修饰变量详解参见:【C语言精讲】——const修饰变量、const修饰指针详解
#include <stdio.h>
#include <string.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src); //断言 - 条件为假时报错提示
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
//strcpy - string copy - 字符串拷贝
char arr1[20] = { 0 };
char arr2[] = "hello";
printf("%s\n", my_strcpy(arr1, arr2)); //链式访问,使用某一函数的返回值作为另一个函数的参数
return 0;
}