char strBusID[4];
memset(strBusID,0,4);
char* filebuffer ="x10001192.168.100.224asdfghijklmnopqrstuvw";
memcpy(strBusID,(filebuffer +2),4);于是 为什么 strBusID会得到 "0001烫烫烫烫D" 这个值呢?

解决方案 »

  1.   

    字符串以0结尾,你要给strBusID分配5个字节,最后一个字节放0
      

  2.   

    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
      

  3.   

    debug工程ansi模式下数组未清0.
      

  4.   

    strBusID是数组,大小是4,那你就取前面4个字符就可以了,后面的不用管了!
      

  5.   

    char szTime[16];
    memset(szTime,'\0',sizeof(szTime));