神功神受耽美文:问一个比较菜的问题,关于c++:

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 00:19:30
请看该程序:#include<iostream.h>
#include<string>
void main()
{
char string[10];
char *str1="0123456789sfsdf"; //15个字符
strcpy(string,str1);
cout<<string<<endl;
} 运行结果:0123456789sfsdf 然后提示“sdvdcv.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。”
我想出现问题很正常,但string只有10个字符的容量,最多装载10个字符,可又怎莫能将15个字符都输出了呢??
高手请指教!!

指针直接获取后面的地址了
如果后面的地址中没有内容,就能够把超出的写进去
数组其实就是一片连续的地址

你那个指针str1并没有开辟内存空间吧(不过好像不是这个)
对了,string[10]是利用的栈空间,也就是说内寸中开辟栈空间是不考虑溢出的,一旦超过10个字节,就显示内存崩溃
另外建议你用堆空间
C++是 char* str = new char[100] ;
delete [] str;

缓冲区溢出了,超出长度的字符覆盖了内存中有用的地址,所以出错

用strcpy应保证前一个字符数组有足够的长度。

字符超出了规定的范围 所以报错