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;
}