ubuntu linux下为什么这段代码不报错,该怎么处理
ubuntu linux下为什么这段代码不报错
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[5];
strcpy(str,"hello world!") //这里应该报错
printf("strcpy over");
}
gcc -o test test.c //用gcc编译
./test // 执行
strcpy over //执行结果,但是没有提示strcpy错误,在windows下VS2005里虽然也能打印出strcpy over,但
是程序会崩溃,为何在ubuntu下没有提示错误?
------解决方案--------------------
windows追求更早更快发现错误,他有结构化异常,对访问了系统能够觉察到的非法内存区域(比如NULL指针,比如内核区,比如加了堆栈检查后的越界),能够报错误,而且能和c++的try..catch联动,你这个错误有可能会被VC的C++异常抓到(不是绝对的,代码里不能依赖这一点)
linux则追求更高的容错性,反正保护模式下再怎么乱写也搞不死系统
意识形态不同造成的结果,windows认为一个错误的程序就不应该继续运行,否则可能扩大错误,如果错误的操作了磁盘,则可能造成不可挽回的损失;linux则希望程序只要能运行就让它运行下去,追求连续性
#include<stdio.h>
#include<string.h>
int main(void)
{
char str[5];
strcpy(str,"hello world!") //这里应该报错
printf("strcpy over");
}
gcc -o test test.c //用gcc编译
./test // 执行
strcpy over //执行结果,但是没有提示strcpy错误,在windows下VS2005里虽然也能打印出strcpy over,但
是程序会崩溃,为何在ubuntu下没有提示错误?
------解决方案--------------------
windows追求更早更快发现错误,他有结构化异常,对访问了系统能够觉察到的非法内存区域(比如NULL指针,比如内核区,比如加了堆栈检查后的越界),能够报错误,而且能和c++的try..catch联动,你这个错误有可能会被VC的C++异常抓到(不是绝对的,代码里不能依赖这一点)
linux则追求更高的容错性,反正保护模式下再怎么乱写也搞不死系统
意识形态不同造成的结果,windows认为一个错误的程序就不应该继续运行,否则可能扩大错误,如果错误的操作了磁盘,则可能造成不可挽回的损失;linux则希望程序只要能运行就让它运行下去,追求连续性