1. strcpy ( ) 函数是用来拷贝字符串的,即将一个字符数组里的字符串拷贝到另一个创建好的新的字符数组中
2. strcpy( ) 函数的功能展示:
3. strcpy ( ) 函数会将以 \0 结尾的字符串拷贝到另一个字符串数组中 ,同时也将 \0 拷贝进去
4. 注意:
接收拷贝的字符串的数组里面的元素可以不全为0,即这个数组自身也可以有内容,但是拷贝过去的字符串就会从第一个元素起逐步进行覆盖
如下图:
注意不要出现常量字符串
5. 总结:
char* strcpy(char * destination, const char * source );
源字符串必须以 '\0' 结束。
会将源字符串中的 '\0' 拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可变。
学会模拟实现
6.strcpy( ) 函数的模拟实现:
【基知】:
* C语言中空格与 \0 不是同一种字符,不要混淆
* 空格的ASCII码值为32 ,而 \0 的ASCII码值为0
* 不要忘记要把 \0 拷贝
* strcpy ( ) 函数的返回类型是目标空间的起始地址,而且设立其为地址的意义是为了实现链式访问
【代码实现】
#include <stdio.h>
#define num 13
char* my_strcpy(const char*, const char*);//其返回类型是char*型的指针
int main()
{
//char arr1[num] = { 0 };
char arr1[num] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
char arr2[7] = "abcdef";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
//char* my_strcpy( char*destination, char*source)
//{
// int i = 0;
// for (i = 0; i < 6 + 1; i++) /*此自定义函数不能把\0也拷贝进去,
// *需要重新改进
// *而且arr2数组的长度也并不是在任何情况下
// *均能确定
// */
// {
// *(destination+i) = *(source+i);
// }
// return destination;
//}
char* my_strcpy(char*destination, char*source)
{
int *change = destination;
while (*destination++ = *source++)//注意由于代码逻辑,所以这里是=,而不是==
//只有这样才能保证将\0也拷贝进去
{
;
}
//return destination;
/*因为strcpy( )函数返回的是目标空间的起始地址,
*又因为destination在while中最后进行了++操作
*所以我们要一开始就先把destination的地址存放起来
然后再返回这个起始地址
*/
return change;
}