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

  • Post author:
  • Post category:其他



前言:在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;
}



版权声明:本文为weixin_63449996原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。