Code Bye

关于memcpy的一个奇怪的问题

这里有代码
char buf[2] = { 0 };
memcpy(buf, “12”, 2);
cout << buf << endl;
实际打印出来的却还有好多其他字符,例如系统时间,还有身份证号什么的,
会不会是编译器优化的后果。
编译器g++  centos环境
解决方案

7

char buf[3] = { 0 };

7

memcpy(buf, “12”, 3)

7

引用:

char buf[3] = { 0 };

正解,没有0结束符,打印超出内存范围

14

字符串要注意最后的”\0″

6

引用:

是这样的.本人用了一个json解析库.叫jsoncpp
相信大家都用过.给json的key赋值都一定要以及”\0″结尾吗

是C/C++里默认的协议,用char *处理字符串都是0结尾的。

12

假如你不确定长度,就定义一个最大的长度。字符串没有结束符除非取定长

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于memcpy的一个奇怪的问题