字符串安全功能与安全性增强CRT

时间:2012-04-18 13:32:33

标签: c windows string winapi strsafe

StringCch *函数是否被认为比CRT字符串函数的安全版本更安全。

StringCchCatW比wcscat_s更安全吗?或StringCchCopyW vs wcscpy_s?

2 个答案:

答案 0 :(得分:2)

这是标记的C ++,所以你不应该使用其中任何一个,而是使用std::wstring

答案 1 :(得分:0)

这实际上取决于您在应用程序中处理字符串的方式。

使用Windows SDK很多人最终混合了大量的c-runtime和windows api调用 - 因为windows api是一个在c-runtime之上分层的C API,windows程序员很难知道它们是这样做,以及为什么(可能)错了。

但是,基本上,在应用程序开发的某些阶段,您确实应该选择从哪里获取基本数据类型。特别是在字符串数据作为本地化api的情况下,效果排序,整理等是完全不同的。

您可以选择使用c-runtimes字符串支持。这涉及使用键入为“const char *”或wchar_t的字符串。特别是微软的c-runtime(可以用GCC开发windows应用程序,所以如果你想编写在多个编译器上编译的代码,这个区别很重要)提供了一组函数,基于在_TCHAR中存储文本数据,以及使用_MBCS和_UNICODE宏将函数从单字符切换到多字节字符到宽字符支持版本。

如果你选择使用c-runtimes字符串抽象,那么使用c-runtimes“safe”字符串例程将是最有意义的。

或者,Windows GUI应用程序经常选择使用Windows SDK数据类型:CHAR,INT,WCHAR,TCHAR,DWORD等字符串,通常由LPCTSTR变量表示,在这种情况下,继续使用windows抽象,SafeStringCch等最有意义。

真的,你可以在一个程序中做的最糟糕的事情就是继续在使用windows API调用和c-runtime调用之间反弹,因为它们有时会处理边缘情况有不同的规则......这可能导致有些人很难发现错误。