strcpy函数

目录

函数介绍:

函数声明:

具体使用:

情况一:

情况二:

注意事项:

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;
}

输出结果:

strcpy函数_第1张图片

情况二:


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会拷贝一些乱七八糟的代码。

 strcpy函数_第2张图片

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是不可改变的空间,而目标空间必须是可以被修改的,因为要将拷贝的字符串放在目标空间中。

strcpy函数_第3张图片

 4.遇见'\0'便会停下:

int main()
{
	char num[20] ;
    strcpy(num,"zhang\0san");
	printf("%s\n", num);
 
	return 0;
}

 strcpy函数_第4张图片

 之前说过\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;
}

strcpy函数_第5张图片

你可能感兴趣的:(C语言,指针,数组,函数,c语言,字符串)