回 帖 发 新 帖 刷新版面

主题:关于new

char *p=new char[5];
cin.getline(p,10);
cout<<p;
delete []p;
这样即使我输入一个长度大于5的字符串后,输出结果依然是我输入的字符串,这是为什么?

回复列表 (共5个回复)

沙发

p指针指向输入字符串的第一个字符地址,cout输出时,从第一个字符开始,一直到'\0'结束,所以,还是输出了大于5的字符串。。。

板凳

简单来说,C/C++编译器不会做边界检查,即便你访问的内存超过了你申请的范围,只要不因为访问了保留内存引发错误导致程序崩溃,程序就会一直非法读写内存……

3 楼


  楼上太经典了!!

4 楼

指针p所指向的是一个首地址,如定义char[n],p==&char[0]
但p并没有结束的标志,也就是说p指向的是一个首地址,你cout<<p
输出的是p之后的数据块
我想这里应该可以将p看成是地址,而非数组指针

5 楼

先看下。。。。。。。。。。。

















[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册