目录
函数介绍:
函数声明:
具体使用:
情况一:
情况二:
注意事项:
1.源字符必须以 '\0'结束:
2.目标空间必须足够大,以确保能放源字符串:
3.目标空间必须可变:
4.遇见'\0'便会停下:
strcpy的模拟实现:
函数介绍:
是将一个字符串复制到另一块空间地址中 的函数,‘\0’是停止拷贝的终止条件,同时也会将 '\0' 也复制到目标空间。
函数声明:
char* strcpy(char* destination,const char* source);
1. 函数的参数:
char* destination---------目标字符串的首地址
const char* source------源地址:被复制的字符串的首地址,用const修饰,避免修改掉被拷贝的字符串。
2.函数的返回值类型:
char*:返回的是目标字符串的首地址。
具体使用:
情况一:
int main()
{
char arr[10] = "########";
printf("%s\n", strcpy(arr, "hello"));
return 0;
}
输出结果:
情况二:
int main()
{
char arr1[10] = "**********";
char arr2[10] = "HELLO";
printf("%s\n", strcpy(arr1, arr2));
return 0;
}
输出结果:
注意事项:
1.源字符必须以 '\0'结束:
int main()
{
char arr1[10] = "**********";
char arr2[] = { 'b','i','t' };
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
代码会出错,因为\0是终止strcpy访问的条件,若没有\0,strcpy会继续遍历,直到在内存中碰见\0为止,这一点和strlen很像,而在找到\0之前,strcpy会拷贝一些乱七八糟的代码。
2.目标空间必须足够大,以确保能放源字符串:
int main()
{
char arr1[3] = "";
char arr2[] = "hello world";
printf("%s\n", strcpy(arr1,arr2));
return 0;
}
目标空间不满足拷贝的内容,虽然会拷贝成功,但是程序会崩溃且造成越界访问。
3.目标空间必须可变:
int main()
{
char* p = "abcdefg";
char str[10] = "hijk";
printf("%s\n", strcpy(p,str));
return 0;
}
p是字符类型的指针,存放的是常量字符串,不可改变,所以p是不可改变的空间,而目标空间必须是可以被修改的,因为要将拷贝的字符串放在目标空间中。
4.遇见'\0'便会停下:
int main()
{
char num[20] ;
strcpy(num,"zhang\0san");
printf("%s\n", num);
return 0;
}
之前说过\0是strcpy的终止符,所以在拷贝的过程中要确保\0处在拷贝内容的最尾端。
strcpy的模拟实现:
char *my_strcpy(char *dest, const char*src) //dest是目标空间,src是拷贝内容
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++)) //将对应位置的拷贝内容传输到目标空间的对应位置
{
;
}
return ret;
}