参数的有效性。例如: 在 C 运行时库中,加入了一些代码,以检查参数的有效性。例如:如果传递的 使用--通常这是在冒安全风险 通常这是在冒安全风险, 目标缓冲区大小不足以 strcpy 使用 通常这是在冒安全风险,而新版本此时则会调用一 个非法参数处理程序。在 release 版中,会调用 Dr.Watson;而在 debug 版中,会 个非法参数处理程序。 版中, ; 版中, 生断言( ),当然 产生断言(assert),当然,只要程序中传递的参数都是有效的,就不会有什么问题了。 ),当然,只要程序中传递的参数都是有效的,就不会有什么问题了。 2、对非安全 API 的警告 、 中的一组函数已不再建议使用, 在 Visual C++ 2005 中,CRT 中的一组函数已不再建议使用,而应使用新 提供的安全版本。大多数这些不建议使用的函数如果使用不当, 提供的安全版本。大多数这些不建议使用的函数如果使用不当,将会导致缓冲区溢出或其 他安全问题,这些函数如: 等等。 他安全问题,这些函数如:strcpy、strcat 等等。这些函数新的安全版本都在函数名后 、 加了一个_s 后缀,以方便识别,如 strcpy_s、wcscpy_s、mbscpy_s、calloc_s 后缀,以方便识别, 加了一个 、 、 、 这些函数。 和 strcat_s 这些函数。 如果想继续使用老版本、非安全的函数,可在源代码开始处加上 如果想继续使用老版本、非安全的函数,可在
源代码开始处加上#define valu 用老版本 e of _CRT_SECURE_NO_DEPRECATE(此处 value 代表某一数值);然而,还 ( 代表某一数值);然而, );然而 是建议大家升级代码使用新的安全函数。 是建议大家升级代码使用新的安全函数。 3、迭代器越界 、 受检查的迭代器( 受检查的迭代器(checked iterators)和调试迭代器(debug iterators) )和调试迭代器( ) 也因为安全的原因进行了相应的更新,如果迭代器越界, 也因为安全的原因进行了相应的更新,如果迭代器越界,则相应会调用一个非法参数处理
程序。 程序。 再次提醒,可以通过抛出一个越界
异常来避免产生非法参数问题。 再次提醒,可以通过抛出一个越界异常来避免产生非法参数问题。在代码中加入 #define value of _SECURE_SCL_THROWS,并把 value 值设为 1,这样就不会 , 这样就不会 调用非法参数处理程序,而是产生一个异常了。 调用非法参数处理程序,而是产生一个异常了。 也可以通过设置#defined value of _SECURE_SCL 值为零,关闭此迭代 值为零, 也可以通过设置 器检查,通常默认情况下,此选项是打开的。 器检查,通常默认情况下,此选项是打开的。
4、time_t 类型 、 time_t 类型通
常用于显示从 1970 年开始以来的秒数。直到 Visual C++ 7. 年开始以来的秒数。 1(即 Visual C++ .net 2003), ( ),time_t 类型都被定义为一个 long,而到了 Visu ), , al C++ 2005 中,已被定义为一个 64 位类型,可用于显示一直到 3000 年的时间了。 已被定义为一个 位类型, 年的时间了。 5、链接到 CRT 、 托管应用程序现在不能静态链接到 CRT。以往,在 Visual C++ 7.0 和 7.1 。以往, ),可以生成静态链接到 中(指 Visual Studio .
NET 2002 与 2003),可以生成静态链接到 CRT 的 CLR ), 程序, 却行不通。 程序,而在 Visual Studio 2005 却行不通。 6、单线程 CRT 支持 、 支持。 在 Visual Studio 2005 中,已经取消了单线程 CRT 支持。而且用发展的眼 光来看,未来大多数的人还是愿意使用线程安全的多线程代码。 光来看,未来大多数的人还是愿意使用线程安全的多线程代码。 在线程中,可使用 后缀来优化代码,但同时,这些函数是非线程安全的。 在线程中,可使用_nolock 后缀来优化代码,但同时,这些函数是非线程安全的。 7、异常处理 、 有两种类型的异常处理可供选择: 有两种类型的异常处理可供选择:/EHa(异步的)和/EHs(同步 C++异 (异步的)