strcpy函数的使用和模拟实现

ac8d9b2440654426b8e6db07f199e280.png

目录

1.头文件

 2.strcpy函数功能

3.示例如下:

4.注意事项:

5.错误示例如下:

6.strcpy函数模拟实现


方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!


1.头文件

 strcpy函数的使用需要包括头文件

#include<string.h>

 2.strcpy函数功能

 dbe3ad73ec9542e9a0409e3e9087841d.png

简述:strcpy函数是一种用于复制字符串内容的函数

strcpy函数接收两个地址参数,这里以图片讲解,第一个地址名为destination,第二个地址名为source

我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符,直到'\0'

所以它会从source地址所对应的字符开始,一个一个的将(source)地址所对应的字符复制到destination地址所对应的字符,直到将'\0'也复制上去后,结束复制


3.示例如下:

 5c83bc4f91c24175ab36046ad7067396.png

我们可以看到,strcpy函数将arr1的字符串复制到了arr中并且arr1中的字符串并没有做出改变


同时,我们会发现d e f  2 3,中间的1没有了,这是为什么呢?

这是因为strcpy会将源字符串(arr1)中的 '\0' 也复制了过去

4.注意事项:

1.源字符串(arr1) 必须以 '\0' 结尾

2.源字符串(arr1) 会将 '\0' 也复制过去

3.目标空间(arr)必须足够大,确保能放进源字符串

4.目标空间 (arr) 必须可以修改


5.错误示例如下:

 53d4200f269e459e830e9d6b5ad1e0e6.png

这种属于注意事项中的第3项,目标空间太小,无法放进源字符串,会直接报错


8fc1a8aab1ba4663bd7fbc900bec846b.png

这种错误属于注意事项4,目标空间被const修饰,不可被修改,将arr1复制到arr原本会修改数组arr,但被const修饰后,数组arr就会变得不可被修改,会直接报错

6.strcpy函数模拟实现

我们讲到strcpy函数是将地址所对应的字符一个一个复制过去,直到源字符串将 '\0' 复制过去后,彻底结束,注意的是将'\0'复制过去

那么我们可以写出这样的代码:

#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void my_strcpy(char* arr1, char* arr2) {
	while (*arr1++ = *arr2++) {
		//先使用后++,可以'\0'复制过去了
	}
	/*错误写法:
	 while(*arr2 != '\0'){
	   *arr1 = *arr2;
		arr2++;
		arr1++;
		}
		这样写无法复制'\0'
	*/
}
int main()
{
	char arr1[20];
	char arr2[] = { "abcdefg" };
	my_strcpy(arr1,arr2);
	int sz = sizeof(arr1) / sizeof(arr1[0]);
	for (int i = 0; i < 8; i++) {
		printf("%c ", arr1[i]);
	}
	//打印出a b c d e f g '\0'
}

通过地址++,实现先使用后加1的操作,成功复制整个字符串,包括'\0'

感谢阅读,不懂可以在评论区提问或者私信

8fdd48caf53e46a897fd8a5554dbb454.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值