用CopyMemory复制字符串,字符串会多出一些东西

几罗星人 2013-08-17 10:36:31

这是C++2010.图上的代码就是这四句:

char a[11];
char b[11]="I Love You";
CopyMemory(a,b,10);
cout<<a;

奇怪的是,我明明指明了CopyMemory复制10个字节(其实不就是10个字符吗?明明sizof(char)=1的),但是从监视窗体上看到a显示出来的字符串是“I Love You烫烫烫*s睵?”,那后面的的“烫烫烫*s睵?”是怎么来的。更奇怪的是明明以数组形式显示的字符串是对的,前面0~9就分别是“I”,“ ”,“L”……,到10刚好就没了,符合char a[11]的声明,所以就更不明白后面的的“烫烫烫*s睵?”是怎么来的???
...全文
203 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-08-18
  • 打赏
  • 举报
回复

类似与这些函数 memcpy,memmove 这些函数都是拷贝定长
strcpy()函数会处理遇到'\0'结束符就停止拷贝的,

不过你这个问题应该是数组没有初始化的!

char a[11] = {0};
或者
memset(a, '\0', sizeof(a));
ri_aje 2013-08-18
  • 打赏
  • 举报
回复
笔误: '\0' 数组结束符 -> '\0' 字符串结束符
ri_aje 2013-08-18
  • 打赏
  • 举报
回复
因为你应该复制 11 个字符。a/b 的类型都是 11 个字符的数组,最后一个隐藏的 '\0' 数组结束符,你不管了吗?
几罗星人 2013-08-18
  • 打赏
  • 举报
回复
原来如此,谢谢各位
mujiok2003 2013-08-18
  • 打赏
  • 举报
回复
因为a[10]没有被修改,还是随机值。

char a[11];
char b[11]="I Love You";
//CopyMemory(a,b,10);
CopyMemory(a,b,11);
cout<<a;
Hope_f 2013-08-18
  • 打赏
  • 举报
回复
你看你a[10]的值是-52而不是预计的0,所以会出现这个问题。 copymemory的实现,瑾瑾是将b内存中的10个丢到a里面去,而你的字符串占用11个字节,也就是说尾部的0没有被复制过去。对于字符串你需要加上尾部0的长度,也就是需要复制11个字节过去。
大尾巴猫 2013-08-18
  • 打赏
  • 举报
回复
引用 4 楼 JiLuoXingRen 的回复:
[quote=引用 1 楼 ri_aje 的回复:] 因为你应该复制 11 个字符。a/b 的类型都是 11 个字符的数组,最后一个隐藏的 '\0' 数组结束符,你不管了吗?
但哪怕是如此,数组我也只分配了11个元素啊,多出来的东西怎么也在这个数组里???[/quote] 内存总是连续的,不可能切一段给你。 说分配给你11个元素,只是划了一个边界,告诉你这一段是你的,两边都是别人家的。 打印字符串的时候不会到了边界就停止,而是去找\0,如果你在边界没有设\0,那么打印的时候就打印到别人家里了。
derekrose 2013-08-18
  • 打赏
  • 举报
回复
引用 4 楼 JiLuoXingRen 的回复:
[quote=引用 1 楼 ri_aje 的回复:] 因为你应该复制 11 个字符。a/b 的类型都是 11 个字符的数组,最后一个隐藏的 '\0' 数组结束符,你不管了吗?
但哪怕是如此,数组我也只分配了11个元素啊,多出来的东西怎么也在这个数组里???[/quote] 编译器不管你分配了多少 反正都在栈里,编译器只找\0
几罗星人 2013-08-18
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
因为你应该复制 11 个字符。a/b 的类型都是 11 个字符的数组,最后一个隐藏的 '\0' 数组结束符,你不管了吗?
但哪怕是如此,数组我也只分配了11个元素啊,多出来的东西怎么也在这个数组里???

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧