2 qq 31294653 qq_31294653 于 2016.05.05 15:34 提问

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

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

4个回答

u013944949
u013944949   2016.05.05 15:49
已采纳

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

qq423399099
qq423399099   Ds   Rxr 2016.05.05 16:28

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

qq_22398097
qq_22398097   2016.05.05 19:49

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

ml422524
ml422524   2016.05.14 10:47

楼上正解,字符串输出到哪里结束,取决于字符结束符'\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;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!