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

最新文章

  1. Asp.Net MVC 分页、检索、排序整体实现
  2. PKCS#1规范阅读笔记1--------基本概念
  3. window删除文件时提示: 源文件名长度大于系统支持的长度
  4. 【ZZ】 移位贴图 Displacement Mapping
  5. struts自定义拦截器
  6. Java跳出循环-break和continue语句
  7. JAVA输入/输出系统中的其他流学习笔记
  8. cocos2d-x 实现粒子飞行特效
  9. 熟悉Git使用
  10. iOS --- [持续更新中] iOS移动开发中的优质资源
  11. Unity3D根据游戏的发展Terrain Toolkit地形生产
  12. 持续集成并不能消除 Bug,而是让它们非常容易发现和改正(转)
  13. SOCKET的一些注意事项
  14. HDU - 4994 Revenge of Nim (取石子游戏)
  15. 安装Dubbo注册中心(Zookeeper-3.4.6)
  16. canvas画布标签
  17. 如何使用cmd打开磁盘目录和文件
  18. Apex 中文件夹相关的单元测试
  19. DES加密解密算法C语言代码实现
  20. idea执行mapreduce报错 Could not locate Hadoop executable: C:\hadoop-3.1.1\bin\winutils.exe

热门文章

  1. Java中 Json的使用
  2. Python 特性?
  3. poj_3179 Corral the Cows (二分+二维前缀和+离散化)
  4. 搜索(DFS)---查找最大连通面积
  5. js中的回调地狱 Callback to Hell
  6. tf.concat,连接矩阵
  7. python在类中使用__slot__属性
  8. 1、控制器运行一个Process进程,等待不等待的问题
  9. 编译安装github上的kafka_exporter项目
  10. a[b]和b[a]区别