strcpy和memcpy的区别

本文对比了C语言标准库函数strcpy和memcpy的功能、使用场景及其源码模拟实现。strcpy专用于字符串复制,而memcpy能复制任意类型数据。了解它们的区别有助于正确选择在实际项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 strcpy函数
1.1 函数原型
char strcpy(char dest, const char src);
1.2 函数功能
strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char

1.3 说明
src和dest所指内存区域不可以重叠,并且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。

2 memcpy函数
2.1 函数原型
void *memcpy(void *str1, const void *str2, size_t n);
2.2 函数功能
C 库函数memcpy从存储区str2复制n个字节到存储区str1。

3 两个函数的区别
3.1 复制的内容
strcpy只能复制字符串,而memcpy是内存拷贝,可以复制任意内容,例如:字符数组、整形、结构体、类等。
3.2 复制的方法不同
strcpy不需要指定长度,它遇到被复制字符串结束符‘\0’才结束,所以容易溢出。memcpy则是根据其第三个参数决定复制的长度。
3.3 用途不同
通常复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

4 函数源码实现
4.1 模拟实现strcpy函数

char* my_strcpy(char* dest, const char* src)
{
		if(src == NULL || dest == NULL)
		{
				return NULL;
		}
		
		char *str = dest;
		while(*src != '\0')
		{
			 *dest++ = *src++;
		}
		
		return str;
}

4.2 模拟实现memcpy函数

void *my_memcpy(void* dest, const void* src, size_t size)
{
		if(dest == NULL || src == NULL)
		{
				return NULL;
		}
		
		char *tempdest = (char*)dest;
		char *tempsrc = (char*)src;
		while(size > 0)
		{
				*tempdest++ = *tempsrc++;
				size--;
		}
		return dest;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值