C语言—strcpy,strncpy函数介绍、以及自己实现字符串的拷贝代码演示

文章详细介绍了C语言中的strcpy函数,包括其功能、使用注意事项以及与strncpy函数的区别。此外,还提供了三种不同的strcpy函数实现示例,并展示了一个自定义strncpy的实现,强调了内存安全问题和字符串复制的细节。
摘要由CSDN通过智能技术生成

目录

一、strcpy函数介绍

二、与strncpy的区别

三 、 实现自己的strcpy

代码演示:

四、实现自己的strncpy

代码演示


一、strcpy函数介绍

函数原型: 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'


————————————————
版权声明:本文为CSDN博主「lambo mercy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_65601072/article/details/123967796

三 、 实现自己的strcpy

代码演示:

#include<stdio.h>
#include<string.h>


char* mystrcpy(char *data,char *data2)   //第一种,实现字符串拷贝
{
	if(data == NULL || data2 == NULL){		
		return NULL;
	}
	
	char *p = data;
	
	while(*data2 != '\0'){   //!!!!!   while(p != '\0'){   逻辑错误!!!!!
		*p = *data2;
		p+1;
		data2+1;
	}
	
	*p = '\0'; 

	return data;
}

char* mystrcpy2(char *data,char *data2)
{
	if(data == NULL || data2 == NULL){		
		return NULL;
	}
	
	char *p = data;
	
	while(*data2 != '\0'){   
		*p++ = *data2++;
	}
	
	*p = '\0'; 

	return data;
}

char* mystrcpy3(char *data,char *data2)
{
	if(data == NULL || data2 == NULL){		
		return NULL;
	}
	
	char *p = data;
	
	while(  (*p++ = *data2++)  !=  '\0')      //记住这种写法while(  (*p++ = *data2++)
	
	*p = '\0'; 

	return data;
}


int main()
{
	char arr[128] = {'\0'};
	char *p = "yyds666666888";
	
	//mystrcpy (arr,p);//第一种写法,实现字符串拷贝
    // mystrcpy2(arr,p);//第二种,实现字符串拷贝
    mystrcpy3(arr,p);//第三种,实现字符串拷贝
    
	
	//strcpy(arr,p);
	printf("arr %s",arr);
	
	
	return 0;
}//7.6字符串的拷贝

运行结果:

arr yyds666666888

四、实现自己的strncpy

代码演示

#include<stdio.h>
#include<string.h>

char* mystrcpy4(char *data,char *data2,int number)
{
	if(data == NULL || data2 == NULL){  //先判断data是否是野指针,如果是野指针下面的执行copy字符串毫无意义
		return NULL;
	}
	
	char *p = data;   //先保存一个字符串数组arr地址,对进行copy偏移操作,
                      //mystrcpy4函数中形式参数char *data,保存的是arr起始地址,不要动,
	                  //结束copy的操作时候需要返回arr的开头地址

	while(*data2 != '\0'  &&  number>0){   
		*p++ = *data2++;
		number--;
	}
	
	
/*	while(*data2 != '\0'){   
		if(number == 0){
			break;
		}
		
		*p++ = *data2++;
		number--;
	}
	*/
	
	if(number>0){
		while(number>0){
			*p++ = '\0';
			number--;
			
		}
		return data;
	}
	
	*p = '\0'; 

	return data;
}


int main()
{
	char arr[128] = {'\0'};
	char *p = "yyds666666888";
	
	mystrcpy4(arr,p,4);   //把字符串p的内容,拷贝到arr ,并且拷贝四个	
	//strcpy(arr,p);
	printf("arr %s",arr);
	
	
	return 0;
}//7.6字符串的拷贝

运行结果:

arr yyds

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值