关于memcpy的一个奇怪的问题

slmax1 2016-07-05 06:01:50
这里有代码

char buf[2] = { 0 };
memcpy(buf, "12", 2);

cout << buf << endl;


实际打印出来的却还有好多其他字符,比如系统时间,还有身份证号什么的,
会不会是编译器优化的后果。
编译器g++ centos环境
...全文
260 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
slmax1 2016-07-06
  • 打赏
  • 举报
回复
明白了。就把0加上吧
netants999 2016-07-05
  • 打赏
  • 举报
回复
如果你不确定长度,就定义一个最大的长度。字符串没有结束符除非取定长
bluewanderer 2016-07-05
  • 打赏
  • 举报
回复
引用 6 楼 csshow 的回复:
是这样的.我用了一个json解析库.叫jsoncpp 相信大家都用过.给json的key赋值都一定要以及'\0'结尾吗
是C/C++里默认的协议,用char *处理字符串都是0结尾的。
slmax1 2016-07-05
  • 打赏
  • 举报
回复
是这样的.我用了一个json解析库.叫jsoncpp 相信大家都用过.给json的key赋值都一定要以及'\0'结尾吗
小灸舞 2016-07-05
  • 打赏
  • 举报
回复
字符串要注意最后的'\0'
rangerlee 2016-07-05
  • 打赏
  • 举报
回复
引用 2 楼 fefe82 的回复:
char buf[3] = { 0 };
正解,没有0结束符,打印超出内存范围
bluewanderer 2016-07-05
  • 打赏
  • 举报
回复
memcpy(buf, "12", 3)
fefe82 2016-07-05
  • 打赏
  • 举报
回复
char buf[3] = { 0 };
slmax1 2016-07-05
  • 打赏
  • 举报
回复
代码只是项目里的一部分

64,685

社区成员

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

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