主题:关于new
buptyx
[专家分:0] 发布于 2010-05-11 11:12:00
char *p=new char[5];
cin.getline(p,10);
cout<<p;
delete []p;
这样即使我输入一个长度大于5的字符串后,输出结果依然是我输入的字符串,这是为什么?
回复列表 (共5个回复)
沙发
苍茫宇宙 [专家分:320] 发布于 2010-05-11 13:55:00
p指针指向输入字符串的第一个字符地址,cout输出时,从第一个字符开始,一直到'\0'结束,所以,还是输出了大于5的字符串。。。
板凳
雪光风剑 [专家分:27190] 发布于 2010-05-11 19:23:00
简单来说,C/C++编译器不会做边界检查,即便你访问的内存超过了你申请的范围,只要不因为访问了保留内存引发错误导致程序崩溃,程序就会一直非法读写内存……
3 楼
龙母绘龙 [专家分:50] 发布于 2010-05-13 09:33:00
楼上太经典了!!
4 楼
Scorpior [专家分:0] 发布于 2010-05-13 20:35:00
指针p所指向的是一个首地址,如定义char[n],p==&char[0]
但p并没有结束的标志,也就是说p指向的是一个首地址,你cout<<p
输出的是p之后的数据块
我想这里应该可以将p看成是地址,而非数组指针
5 楼
yjldngyj [专家分:0] 发布于 2012-11-10 19:33:00
先看下。。。。。。。。。。。
[url=http://www.sc115.com/vector]矢量素材[/url],[url=http://www.sc115.com/PPT]PPT模板[/url],[url=http://www.sc115.com]素材中国[/url]
我来回复