目录
方源一把抓住VS2022,催动春秋产的气息,顷刻炼化!
1.头文件
strcpy函数的使用需要包括头文件
#include<string.h>
2.strcpy函数功能
简述:strcpy函数是一种用于复制字符串内容的函数
strcpy函数接收两个地址参数,这里以图片讲解,第一个地址名为destination,第二个地址名为source
我们知道,字符串只要给出其中一个字符的地址,那系统就会顺藤摸瓜出这个地址之后所有的字符,直到'\0'
所以它会从source地址所对应的字符开始,一个一个的将(source)地址所对应的字符复制到destination地址所对应的字符,直到将'\0'也复制上去后,结束复制
3.示例如下:
我们可以看到,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.错误示例如下:
这种属于注意事项中的第3项,目标空间太小,无法放进源字符串,会直接报错
这种错误属于注意事项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'
感谢阅读,不懂可以在评论区提问或者私信