前言:在C/C++的学习过程当中一定一定要多刷题,牛客网作为国内内容超级丰富的IT题库,尤其是它的C、C++,有从入门到大厂真题,而且大部分的考试题目也是从中抽取,还有很多面经,推荐大家去牛客网进行刷题练习,点击链接
:
牛客网刷题入口
前言
strcpy,即string copy(字符串复制)的缩写。
strcpy是C++语言的一个标准函数 ,strcpy把含有’\0’结束符的字符串复制到另一个地址空间。
strcpy的头文件:string.h
一、认识并使用strcpy函数
1.库函数中strcpy函数的声明
char* strcpy(char* destination,const char* source);
2.认识strcpy函数
第一,strcpy函数最后返回的是目的地字符串首元素的地址,所以返回类型是char*,由于我们只是把一个字符串复制到另一个地址空间,所以源头字符串不会被修改,所以我们用const修饰,比较安全。strcpy是将源头字符串包括’\0’复制到另一个地址空间,这样才能确保目的地字符串有字符串结束的标志’\0’,程序不会崩溃。
3.使用strcpy函数
#include<stdio.h>
int main()
{
char arr1[30] = "hello";
char arr2[] = "world";
strcpy(arr1, arr2);
printf("%s", arr1);//world
return 0;
}
4.注意
(1)目标空间必须足够大,以确保能放的下复制过来的字符串
(2)目标空间必须可变,即char* destination不能用const修饰,并且
目的地空间的字符串不能是常量字符串
,
常量字符串不可被修改
。以下为错误示范:
char *arr1="abcdefghi";//常量字符串,用指针变量arr1保存
(3)
源字符串必须含有’\0’
,以下为错误示范
char arr2[]={'a','b','c'};//错误示范
(4)strcpy会将源字符串的’\0’也拷贝到目的地空间
(5)学会strcpy的模拟实现
二、模拟实现strcpy函数
1.明确思路
(1)指针断言,安全性优化,保证dest和src均不为空指针
(2)保留目的地字符串首元素地址,因为在拷贝过程中,dest++,一直往后移动
(3)最开始,指针dest指向arr1的首元素地址,指针src指向arr1的首元素地址,然后我们一个个向后走,依次赋值,直到*dest=*src=‘\0’,表达式的结果同时作为循环的判断条件。
实现代码
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
//指针断言
assert(dest != NULL);
assert(src!= NULL);
//由于在赋值过程中,dest的指向会被更改
//所以先保留首元素地址
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[30] = "hello";
char arr2[] = "hello world!!!!!!";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}