*p为何是乱码

*p为什么是乱码?
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'; 看看该据输出的字符跟你说的乱码应该是一样的。