*p为何是乱码
*p为什么是乱码?
------解决方案--------------------
在执行 while(*p++=*p2++!='\0'); 语句的时候,由于 *p2++ !='\0' 条件成立,因此会依次向 p 指向的地址赋值 01,该语句执行完之后,p 指向arrayP数组越界后的第一个内存空间,并且此时arrayP原来的内存空间除了最后一个是‘\0’以外,全部被写为 '\01',因此下面的三个输出函数中,第一个输出空值,后面两个输出乱码。
这个乱码实际上是输出的'\01',楼主可以增添一句 cout<< '\01'; 看看该据输出的字符跟你说的乱码应该是一样的。
- C/C++ code
#include <iostream> using namespace std; int main() { char arrayP[10]="abcdefghi"; char arrayP2[10]="abcdefghI"; char* p = arrayP; char* p2 = arrayP2; while(*p++=*p2++!='\0'); cout<<*(--p)<<endl; cout<<*(--p)<<endl; cout<<*(--p)<<endl; }
------解决方案--------------------
在执行 while(*p++=*p2++!='\0'); 语句的时候,由于 *p2++ !='\0' 条件成立,因此会依次向 p 指向的地址赋值 01,该语句执行完之后,p 指向arrayP数组越界后的第一个内存空间,并且此时arrayP原来的内存空间除了最后一个是‘\0’以外,全部被写为 '\01',因此下面的三个输出函数中,第一个输出空值,后面两个输出乱码。
这个乱码实际上是输出的'\01',楼主可以增添一句 cout<< '\01'; 看看该据输出的字符跟你说的乱码应该是一样的。