C++ 代码在 msdev 6.0 中运行良好并在 Visual Studio 2010 中崩溃

C++ code works fine in msdev 6.0 and crashes in Visual Studio 2010

我不是 C 编程专家,但这是我正在处理的一段代码

static char gszBuf[10] ="1234567890";
#define       LS_MAX_STRING    255
LoadDatatoBuffer(id, gszBuf, LS_MAX_STRING); 
// this method will load the data wrt ID to gszBuf

考虑到上述方法加载的是超过10个字符的char字符串,即gszBuf = "abcdefghijklmnopqr";

以上代码 运行 在 msdev 6.0 中没有任何问题。但是当我们尝试复制上述数据时,使用 visual studio 2010 创建的同一个应用程序崩溃了。我的问题是是什么让上面的代码在 msdev 6.0 中工作,为什么它不能在 visual studio 2010

中 运行

未定义的行为可能意味着代码会崩溃,但也可能意味着代码看似有效,但会导致失败。

在这种情况下,如果 gszBuf 位于 CPU 页面的开头,并且之后没有任何重要内容,则它不会崩溃。

你应该感谢 VS2010 制作了你的代码 "crash"。
当你的缓冲区溢出时,最好尽快崩溃,而不是让黑客利用你的缓冲区溢出。

VS2010 有多项安全改进和缓冲区溢出检查:考虑它们机会来提高代码质量并修复缓冲区溢出相关的错误。