标准库函数:
char *strcpy( char *strDestination, const char *strSource );
使用strcpy函数
模拟strcpy函数
注:上面的代码中,my_strcpy函数的返回类型为空,我忘记加上了。
优化my_strcpy()函数(优化程度依次加深)
第一种:
my_strcpy(char* dest, char* src)
{
while (*src != '\0')
{
*dest ++ = *src ++;
//拷贝hello
}
*dest = *src;
//拷贝'\0'
}
第二种:
my_strcpy(char* dest, char* src)
{
while (*dest++ = *src++)
;
}
//既完成了拷贝,又完成了停下来的动作
第三种:
Q:如果传的是空指针?
A:空指针不能解引用操作,我们需要优化来保护指针。
1)断言
保护指针指向的内容不被修改。
2) const
放在*左边
放在*右边
优化后:
void my_strcpy(char* dest,const char* src)
//const会在数组放反的时候报错
//const修饰变量,这个变量被称为常变量,不能被修改,但本质上还是变量
{
assert(src != NULL);//断言----->判断指针是否不是空指针
assert(dest != NULL);//断言
while (*dest++ = *src++)
;
}
int main()
{
char arr1[20] = { "*************" };
char arr2[] = { "hello" };
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
第四种:
char* my_strcpy(char* dest,const char* src)
{
assert(src != NULL);//断言
assert(dest != NULL);//断言
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;//返回目标空间的起始地址
}
int main()
{
char arr1[20] = { "*************" };
char arr2[] = { "hello" };
printf("%s", my_strcpy(arr1, arr2)); //链式访问
return 0;
}