strcpy函数详解看这一篇就够了-C语言(函数实现、使用用法举例、与strncpy的区别)

首先要明确strcpy的功能是:将参数src字符串拷贝至参数dest所指的地址

 

目录

函数介绍

与strncpy的区别

函数实现1:

函数实现2 改进:

用法示例:

函数介绍


函数原型: char*strcpy(char*dest,const char*src)   //将src复制到dest字符数组中
头  文  件:#include <string.h>
返  回  值:char* 类型,返回的是第一个参数的值,即目的数组的首地址;

注 意:
1、strcpy只用于字符串复制,遇到‘\0’时停止,还会复制字符串的结束符'\0'; 所以源字符串必须         以’\0’结束,也会将源字符串的’\0’拷贝到目标空间
2、目标空间必须可变
3、如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况,在编写程序时需特别       留意,或者用strncpy()来代替

与strncpy的区别

1、strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数n

     大家可以对比一下两个函数原型:

    char *strcpy(char *dest, const char *src);

    char * strncpy(char *dest, const char *src, size_t n);

2、不像strcpy(),strncpy()不会向dest追加结束标记'\0'

函数实现1:

char* My_strcpy(char* dest, char* src)
 {
	char* ret = dest;    //将首地址储存,在之后dest后置++运算中,可以方便找到
	while (*src != '\0') //复制'\0'前的字符,直到src=\0
    {
		*dest = *src;  //复制
		dest++;      //目标地址往后+1
		src++;       //源地址往后+1
	}
	*dest = *src;   //再将结尾的‘\0’复制过去
	return ret;       //返回目的数组的首地址
}

这样就好了吗?

函数实现2 改进:

我们可以进行以下改进:

1、可以将while中的语句整合一下 

2、引用assert函数来避免:若传过去的是空指针,那么解引用的时候,没有可读取的地址,会出现错误。

3、对比声明,我们还有const char*可以替换


//加上conest使要拷贝的字符数组中存放的字符串不可改变,同时防止拷贝时出现"拷贝反了"的现象
char* My_strcpy(char* dest,const char* src)
{
	assert(dest != NULL && src != NULL);
	char* ret = dest;         
	while (*dest++ = *src++) 
    {
        ;
	}
	*dest = *src;
	return ret;
}

用法示例:

#include <stdio.h>
#include<string.h>
#include <assert.h>
char* My_strcpy(char* dest, const char* src)
{
	assert(dest != NULL && src != NULL);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	*dest = *src;
	return ret;
}
int main()
{
	char arr1[] = "I LOVE YOU";
	char arr2[] = "SORRY";
	My_strcpy(arr1, arr2);
	//经过函数My_strcpy后 ,arr1里应该是arr2里的字符串SORRY
	printf("arr1: %s\n", arr1);
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值