在Visual Studio 2005以前版本的Visual Studio默認使用多字節字符集,而Visual Studio 2005、Visual Studio 2008默認使用Unicode字符集。如果您的代碼必須要借助以前版本的VC++編寫的代碼,可以采用兩種方法將VC++6.0中的代碼加入到VC++2008中:
在Visual C++ 2008中,CRL(C Runtime Library)中的一組函數已不再建議使用,而應使用新提供的安全版本。大多數這些不建議使用的函數如果使用不當,將會導致緩沖區溢出或其他安全問題,這些函數如:strcpy、strcat等等。這些函數新的安全版本都在函數名后加了一個_s后綴,以方便識別,如strcpy_s、wcscpy_s、mbscpy_s、calloc_s和strcat_s等。
但如果我們使用Visual C++ 2008編譯如圖1-14所示的代碼,在"Release"方式下編譯,就會出現如圖1-16所示的警告:
圖1-16 strcpy_s函數緩沖區溢出時Visual C++ 2008編譯器發出警告信息
從上面分析可以看到,使用安全函數是Visual C++ 2008相對于Visual C++6.0的一個巨大的改進。
1.5.3 Visual C++ 2008相對于VC++6.0的其他改進
Visual C++ 2008相對于VC++6.0還有其他方面的改進,在使用Visual C++ 2008進行編程時,也要留意這些變化。對初學者來說,主要有以下方面需要注意:
1. 參數的有效性
Visual C++ 2008在C運行時庫中加入了一些代碼,以檢查參數的有效性。例如:如果傳遞的目標緩沖區大小不足以strcpy使用,此時則會調用一個非法參數處理程序。
2. 迭代器越界
迭代器因為安全的原因進行了相應的更新,如果迭代器越界,則相應會調用一個非法參數處理程序。
3. time_t類型
time_t類型通常用于顯示從1970年開始以來的秒數。直到Visual C++ 7.1(即Visual C++ .NET 2003),time_t類型都被定義為一個long,而到了Visual C++ 2005和Visual C++ 2008中,已被定義為一個64位類型,可用于顯示一直到3000年的時間了。