目录
一: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用于将一个字符串复制到另一个字符串中,只能操作字符串类型的数据,会自动复制字符串结束符。