memcpy与strcpy的详细理解

目录

一:strcpy的用法

二:memcpy的用法

参数

返回值:dest

三:strcpy与memcpy区别


一:strcpy的用法

定义于头文件<cstring>中,

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

复制 src 所指向的字符串,包含空终止符,到首元素为 dest 所指向的字符数组。

strcpy函数是字符串拷贝函数,strcpy(char *destination,const char* sourse),两个参数是字符串首地址

strcpy的例子用法

#include<bits/stdc++.h>
using namespace std;
int main(void){
	char a[]="hejb";//注意这里不能用string a="hegb",是字符数组专属的 
	char b[]="hdsjb";
	strcpy(a,b);
	cout<<a;//输出为hdsjb
	return 0;
}

二:memcpy的用法

 定义在头文件<cstring>中

void* memcpy( void* dest, const void* src, std::size_t count );

参数

dest-指向要复制的对象的指针
src-指向复制来源对象的指针
count-复制的字节数

返回值:dest

memcpy的用法例子,一

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a[4]={1,2,3,4};
	int b[5]={5,6,7,8,9};
	memcpy(a,b,sizeof(b));//这里第三个参数单位是"字节",长度选择尽量用b的长度 
	for(int i=0;i<5;i++){//输出为5 6 7 8 9
		cout<<*(a+i)<<" ";
	}
	return 0;
}

一个int型为四个字节,sizeof(b)是求b 数组的字节数;

memcpy的用法例子,二

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a[4]={1,2,3,4};
	int b[5]={5,6,7,8,9};
	memcpy(a+2,b,sizeof(b));//表示从第三个元素开始复制b的5个元素 
	for(int i=0;i<7;i++){//输出为:1 2 5 6 7 8 9 
		cout<<*(a+i)<<" ";
	}
	return 0;
}

对于string,char,double与上面用法相同。

如果代码写成如下所示

#include<bits/stdc++.h>
using namespace std;
int main(void){
	int a[5]={0,1,2,3,4};
	int b[5]={-1,6,7,8,9};
	memcpy(a+2,b,1);
	for(int i=0;i<5;i++){
		cout<<*(a+i)<<" ";//输出为 0 1 255 3 4 
	}
	return 0;
}

这里要稍微理解下little-endian和big-endian(litter-endian:高位字节数据存放在内存高地址处,低位数据存放在内存低地址处。bit-endian:高位字节数据存放在内存低地址处,低位字节数据存放在内存高地址处。)

按照litter-endian存储方式说明下原因

 大家可以将-1替换为:256(输出为0 1 0 3 4),255(输出为0 1 255 3 4),257(输出为0 1 1 3 4),并且尝试理解;

三:strcpy与memcpy区别

memcpy和strcpy都是C语言中的字符串操作函数。

但它们的功能不同。

memcpy用于将内存块复制,可以复制任意类型的数据,没有字符串结束符的限制;

而strcpy用于将一个字符串复制到另一个字符串中,只能操作字符串类型的数据,会自动复制字符串结束符。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值