为什么输出的长于数组长度呢

s2规定长度是10,为什么输出的变成15了呢图片图片

你将s2的地址赋给了p2,他们就指向同一个地址,所以之后p2怎么变,s2就怎么变。

输出的长度取决于'\0'的位置在哪里,而不是数组的大小是多少
楼主这样的写法越界写入了,运行的时候有的编译器会直接报异常的

楼上说的不错,应该是取决于'\0'的位置,因为我身边没有电脑,你可以尝试一下把s2申请成s2[11]试试,这样应该输出aAbBcCdDeE

楼上正解,字符串输出到哪里结束,取决于字符结束符'\0'。
程序应这样写:

 #include <iostream>
#include <cstring>

using namespace std;
int main()
{

    char s1[10] = "abcde";char s2[11] = "ABCDE";
    char *p1 = s1; char *p2 = s2;
    char s3[10];char *p3 = s3;
    strcpy(s3,s2);

    while(*p1 != '\0')
    {
        *p2++ = *p1++;
        *p2++ = *p3++;

    }
    *p2 = '\0';
    p2 = s2;
        cout << "s2 = " << p2 << endl;


return 0;
}