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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【汇编程序】编一个程序,从键盘输入一个不长于40个字符的串,然后将其反转输出
STACKS SEGMENT STACK DW 100H DUP(?) TOP LABEL WORD STACKS ENDS --定义栈 DATAS SEGMENT TABLE DB 100H DUP(?) DATAS ENDS --定义变量 ...
PD教程PD教程PD教程
为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?
js关联数组长度为0
<br />今天用长度来判断关联数组是否为空,结果发现数组不为空长度也为0。<br />如下代码:<br />var objIds = [];//父级参数数组 objIds["channelChat"]= [];//子级参数数组 objIds["channelChat"]["10"] = ["hallGread"]; objIds["channelChat"]["11"] = ["channelTp"];<br /> 
字符串与字符数组初始化及长度计算
字符串与字符数组初始化及长度计算:   方式一:char a[]="hello";系统自动在末尾补'\0',sizeof的结果为6,strlen的结果为5;   方式二:char a[]={'h','e','l','l','o'}; 末尾不补'\0',sizeof的结果为5,strlen的结果为                        19(不正确的原因为strlen运行时遇到'
知道为啥HashMap里面的数组size必须是2的次幂?
最近在写一个简易的分离锁的类:   要求:对不同的Key进行hash得到一个Lock,并要求对锁映射的概率差不多。比如,160个Key,分布到16个锁上,大概有10个Key是映射到同一个锁上的,只要这样并发效率才会高。   Java代码   public class SplitReentrantLock {          private Lock[
java中的数组长度问题
之前对java中的数组一直是一知半解,特别是数组中的长度问题。今天对这个问题也算是小有理解,算是对java数组的有了更进一步的了解吧。不说了,先来例子再说: eg  code: package com.test; public class Test { /** * @param args */ public static void main(String[] ar
C++获取数组的长度(用模板可以实现)
#include using namespace std; int getArrLen1(int *&a){//error return sizeof(a)/sizeof(a[0]); } int getArrLen2(int *a){ return sizeof(a)/sizeof(a[0]); } template int getArrayLength1(T a){ retu
c中自定义函数通过sizeof来输出数组的长度为何不正确?【原创】
这两天,在学习C语言的时候遇到一个bug。后来就在segmentfault提问,通过网友的回答也就解决了这个问题。提问的问题链接是:c中自定义函数通过sizeof来输出数组的长度为何不正确? 在C语言中,获取数组的长度大小,即元素个数一般用 sizeof(arr)/sizeof(arr[0])来表示。即: #include    int main(){     do
为什么使用length获取Java数组的长度
记得vamcily 曾问我:“为什么获取数组的长度用.length(成员变量的形式),而获取String的长度用.length()(成员方法的形式)?”   我当时一听,觉得问得很有道理。做同样一件事情,为什么采用两种风格迥异的风格呢?况且,Java中的数组其实是完备(full-fledged)的对象,直接暴露成员变量,可能不是一种很OO的风格。那么,设计Java的那帮天才为什么这么做
项目常见错误及解决方法-console.log打印数组,数组有元素但长度为0
在项目中,使用restangular,在成功回调函数中,给数组复制,同时,返回给一个数组变量,在函数后面,打印出现: 数组为空,但是点开又有数据,最终找到原因: 因为开始空数组没赋值,赋值之后,因为是地址引用,那个数组已经被修改了。显示零是原来的长度。但包含修改后的结果。换句话说,就是由于restangular异步请求数据,在执行restangular时(由于异步,此时,开始回调函数还