hur.cn - 华软网

 热门搜索

各位大虾帮帮忙,memcpy之后 得到“烫烫烫烫D” 为什么呢?

  作者:未知    来源:网络    更新时间:2011/1/10

char strBusID[4];
memset(strBusID,0,4);
char* filebuffer ="x10001192.168.100.224asdfghijklmnopqrstuvw";
memcpy(strBusID,(filebuffer +2),4);

于是 为什么 strBusID会获得 "0001烫烫烫烫D" 这个值呢?
---华软 网友回答---
字符串必需有结束符\0!你拷贝4字节进去,后面必需分配额外一个字节填入'\0'
---华软网友回复---
字符串以0末端,你要给strBusID分配5个字节,最后一个字节放0
---华软网友回复---
啊,我试一试去,,
---华软网友回复---
char strBusID[5];
memset(strBusID,0,5); // 把5个字节全数清0,最关头的就是把strBusID[4]置为'\0'
char* filebuffer ="x10001192.168.100.224asdfghijklmnopqrstuvw";
memcpy(strBusID,(filebuffer +2),4);

char s[]这样的字符串实质上是数组,它是依赖'\0'来标志字符串末端的。
如果0001之后没有'\0',他就会把后续内存里的内容掏出来,直到遇到一个'\0'为止。
注意区别'\0'和'0'。'\0'对应ascii的0,'0'对应ascii码的48。
DEBUG模式下运行时,未初始化的变量会被系统赋初值为0xCC ,超过了ASCII码0-127这个范围,因此这个“字符串”被系统当做了宽字符组成的字符串,即两个字节数据组成一个字符,而0xCCCC表示的宽字符正好是乱码中的那个“烫”字。
http://blog.csdn.net/fallinsky/archive/2010/11/19/6020412.aspx

---华软网友回复---
字符串必需有结束符\0!在末端加\0就好了!!!!
---华软网友回复---
留一个空间来寄存'\0'字符
---华软网友回复---
debug工程ansi模式下数组未清0.

---华软网友回复---
strBusID是数组,巨细是4,那你就取前面4个字符就能够了,后面的不用管了!
---华软网友回复---
char szTime[16];
memset(szTime,'\0',sizeof(szTime));
---华软网友回复---
楼上的都是正解。但指针型字符串最好以\0末端,这是个良好的习气。
---华软网友回复---
申请内存后,必需初始化   切记      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。