1

我不是 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 中运行

4

2 回答 2

1

您应该感谢 VS2010 使您的代码“崩溃”。
当你有缓冲区溢出时,最好尽快崩溃,而不是让黑客利用你的缓冲区溢出。

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

于 2015-11-24T12:20:11.243 回答
0

未定义的行为可能意味着代码会崩溃,但也可能意味着代码看起来可以工作,但会导致失败。

在这种情况下,如果 gszBuf 在 CPU 页面的开头,并且在它之后,没有什么是重要的,那么它就不会崩溃。

于 2015-11-24T11:54:10.510 回答