【C语言】strcpy函数_字符串拷贝【详解】

前言:在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;
}
  • 30
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_麦子熟了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值