2012-04-18 81 views
1

StringCch *函數是否被認爲比安全版本的CRT字符串函數更安全。字符串安全功能vs安全增強CRT

是StringCchCatW比wcscat_s更安全嗎?或者StringCchCopyW vs wcscpy_s?

+0

更安全嗎?你的背景是什麼?數據來自哪裏?你是否想要標記這個C? – 2012-04-18 13:34:36

回答

2

這是標記爲C++,所以你不應該使用它們中的任何一個,而是std::wstring

+0

當你必須從一個Windows API函數接收一個字符串,附加一個新行,並將其傳遞給另一個API函數時,情況如何?將它轉換爲'std :: wstring',然後追加新行,並將c_str()傳遞給api函數真的更好嗎? – Josh 2012-04-18 13:40:56

+0

@josh確實如此。 – 2012-04-18 13:42:48

+0

@Josh:是的。另外,你可以使用'wstring'或者'vector '作爲臨時緩衝區。 – 2012-04-18 13:43:58

0

這實際上取決於您在應用程序中如何處理字符串。

隨着Windows SDK許多人最終混合了大量的c-runtime和windows api調用 - 因爲windows api是一個C++運行時的C API,很難讓Windows程序員知道它們正在這樣做,爲什麼它(可能)是錯誤的。但是,基本上,在應用程序開發的某個時刻,你應該選擇從哪裏獲取基本數據類型。特別是在字符串數據作爲本地化apis的情況下,這種效果的排序,整理等是完全不同的。

您可以選擇使用c-runtimes字符串支持。這涉及使用鍵入爲「const char *」或wchar_t的字符串。特別是微軟的c-runtime(可以用GCC開發windows應用程序,所以如果你想編寫在多個編譯器上編譯的代碼,這種區別就很重要)提供了一組函數,基於在_TCHAR中存儲文本數據,以及使用_MBCS和_UNICODE宏將函數從單個字符切換到多字節字符到寬字符支持版本。

如果您選擇使用c-runtimes字符串抽象,那麼使用c-runtimes「安全」字符串例程將是最有意義的。

或者,Windows GUI應用程序經常選擇使用Windows SDK數據類型:CHAR,INT,WCHAR,TCHAR,DWORD等。字符串通常由LPCTSTR變量表示,在這種情況下,繼續使用窗口抽象,SafeStringCch等最有意義。

真的,你可以在程序中做的最糟糕的事情是在使用windows API調用和c-runtime調用之間保持彈跳,因爲它們有時會有不同的規則來處理邊緣情況......這可以導致一些很難發現錯誤。