64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string>
using namespace std;
int main()
{
char s[]="123456789";
char d[]="123";
strcpy(d,s);
cout<<d<<endl;
cout<<s<<endl;
return 0;
}
char d[3]="12";
strcpy(d,"123");
cout<<d<<endl;
我尝试了这段代码,结果也没出错。[/quote]
C++中越界操作在编译时期是不检测的,只有在运行中才能检测出,你上面的那段代码进行strcpy拷贝时,的确发生了越界,但并没有超出该进程中的内存地址空间,所以不会报错。最好不要这样操作,因为不同编译器对程序的优化方式不一样,同时,变量内存的分配也跟操作系统有关,你无法确定其是否会超出进程地址空间,而且会影响各变量数据的独立性char d[3]="12";
strcpy(d,"123");
cout<<d<<endl;
我尝试了这段代码,结果也没出错。