说来说去还是这种声明方式作怪:char* strDest = "bugs";
char* strSrc = "why baby";象这个样子声明的字符串会被当作一种特殊的常量(如果你在 VC++ 中用 DEBUG 版本编译,上述代码会报告运行时错误),这样的字符串的存储是很特殊的,记得应该是出于节省内存的考虑,可能会共享内存,甚至对它们的写可能导致指针所指向地址的改变。所以想要在 C++ 好好的用字符串,就不要用这种方式声明。C++ 之所以还保留这个,仅仅为了保持对 C 的兼容罢了。

解决方案 »

  1.   

    such as int i=0; i++, the i will be 1
    so the strSrc++ also changet he point address, after while( (*strDest++ = *strSrc++) != ''''\0'''' ) , your strSrc changed
      

  2.   

    because after 
    while( (*strDest++ = *strSrc++) != ''''\0'''' ) 
    NULL ; 
    the strSrc++ will change the point address
      

  3.   

    1、char* strDest = "bugs";
    char* strSrc = "why baby";
    定义了两个char指针,分别指向两块内存,一块内容为"bugs";另一块内容为"why baby";
    2、while( (*strDest++ = *strSrc++) != ''\0''
    修改了strDest,导致strDest内容不可预知,因为指针移动的范围已超出其内存的大小;
      

  4.   

    strDest++  以后,实际指向的地址已发生了变化,与address不同