说来说去还是这种声明方式作怪:char* strDest = "bugs";
char* strSrc = "why baby";象这个样子声明的字符串会被当作一种特殊的常量(如果你在 VC++ 中用 DEBUG 版本编译,上述代码会报告运行时错误),这样的字符串的存储是很特殊的,记得应该是出于节省内存的考虑,可能会共享内存,甚至对它们的写可能导致指针所指向地址的改变。所以想要在 C++ 好好的用字符串,就不要用这种方式声明。C++ 之所以还保留这个,仅仅为了保持对 C 的兼容罢了。
char* strSrc = "why baby";象这个样子声明的字符串会被当作一种特殊的常量(如果你在 VC++ 中用 DEBUG 版本编译,上述代码会报告运行时错误),这样的字符串的存储是很特殊的,记得应该是出于节省内存的考虑,可能会共享内存,甚至对它们的写可能导致指针所指向地址的改变。所以想要在 C++ 好好的用字符串,就不要用这种方式声明。C++ 之所以还保留这个,仅仅为了保持对 C 的兼容罢了。
so the strSrc++ also changet he point address, after while( (*strDest++ = *strSrc++) != ''''\0'''' ) , your strSrc changed
while( (*strDest++ = *strSrc++) != ''''\0'''' )
NULL ;
the strSrc++ will change the point address
char* strSrc = "why baby";
定义了两个char指针,分别指向两块内存,一块内容为"bugs";另一块内容为"why baby";
2、while( (*strDest++ = *strSrc++) != ''\0''
修改了strDest,导致strDest内容不可预知,因为指针移动的范围已超出其内存的大小;