memcpy复制字符串的注意事项/memcpy不能用来拷贝类类型
2024-10-07 13:16:44
strcpy复制src到dst,最后将dst的下一个位置置为'\0',所以dst是以'\0'结尾的字符串
char c1[] = "abcde";
cout << c1 << endl;
char *s = c1;
char*end = &c1[];
printf("%d\n", strlen(c1));// strlen不包括结尾的'\0'长度
printf("%d\n", sizeof(c1));//10个字节
while (s != end)
{
cout <<int( *s++) << " "; }
char c2[];//c2的元素默认初始化,值未知
for (auto x : c2)
{
cout << int(x) << endl;//转换为int输出 }
strcpy(c2, c1); //memcpy(c2, c1,strlen(c1));
for (auto x : c2)
{
cout <<int( x )<< endl;//转换为int输出 }
cout << strlen(c2) << endl;
但是用memcpy是按字节拷贝,第三个参数不大于strlen(c1)长度,就不会拷贝空字符到尾部,下面这段代码只拷贝了abcde, '\0'不会被拷贝,strlen(c2)会求出一个错误的长度
char c1[] = "abcde";
char c2[];//c2的元素默认初始化,值未知
/*strcpy(c2, c1);*/
memcpy(c2, c1,strlen(c1));
for (auto x : c2)
{
cout <<int( x )<< endl;//转换为int输出 }
cout << strlen(c2) << endl;
正确的拷贝做法是 memcpy(c2,c1,strlen(c1)+1)
memcpy的拷贝方式是void*dst和void*src都转换为char*类型的指针,按字节拷贝
memcpy可以用于int,char,struct,数组的拷贝,可以拷贝string类型吗?
int a[] = { , , , , , , , , , };
int *ap = new int[];
memcpy(ap, a, sizeof(a)*sizeof(int));
int *endp = ap + ;
while (ap != endp)
{
cout << *ap++ << " "; }
拷贝结构体
struct {
char name[];
int age;
} person, person_copy; int main()
{
char myname[] = "Pierre de Fermat"; /* using memcpy to copy string: */
memcpy(person.name, myname, strlen(myname) + );
person.age = ; /* using memcpy to copy structure: */
memcpy(&person_copy, &person, sizeof(person)); printf("person_copy: %s, %d \n", person_copy.name, person_copy.age); return ;
}
不能拷贝string类型,sizeof(string)只是求了固定大小的成员的内存和,而没有求string内部指针指向的存字符的那一段内存
如果结构体含有指针,指向某段内存,memcpy的拷贝也会失败
https://www.2cto.com/kf/201111/110916.html http://blog.csdn.net/qq_21550341/article/details/51636366
最新文章
- Asp.Net MVC 分页、检索、排序整体实现
- PKCS#1规范阅读笔记1--------基本概念
- window删除文件时提示: 源文件名长度大于系统支持的长度
- 【ZZ】 移位贴图 Displacement Mapping
- struts自定义拦截器
- Java跳出循环-break和continue语句
- JAVA输入/输出系统中的其他流学习笔记
- cocos2d-x 实现粒子飞行特效
- 熟悉Git使用
- iOS --- [持续更新中] iOS移动开发中的优质资源
- Unity3D根据游戏的发展Terrain Toolkit地形生产
- 持续集成并不能消除 Bug,而是让它们非常容易发现和改正(转)
- SOCKET的一些注意事项
- HDU - 4994 Revenge of Nim (取石子游戏)
- 安装Dubbo注册中心(Zookeeper-3.4.6)
- canvas画布标签
- 如何使用cmd打开磁盘目录和文件
- Apex 中文件夹相关的单元测试
- DES加密解密算法C语言代码实现
- idea执行mapreduce报错 Could not locate Hadoop executable: C:\hadoop-3.1.1\bin\winutils.exe
热门文章
- Java中 Json的使用
- Python 特性?
- poj_3179 Corral the Cows (二分+二维前缀和+离散化)
- 搜索(DFS)---查找最大连通面积
- js中的回调地狱 Callback to Hell
- tf.concat,连接矩阵
- python在类中使用__slot__属性
- 1、控制器运行一个Process进程,等待不等待的问题
- 编译安装github上的kafka_exporter项目
- a[b]和b[a]区别