字符串安全函数与安全增强型CRT

字符串安全函数与安全增强型CRT,c,windows,string,winapi,strsafe,C,Windows,String,Winapi,Strsafe,StringCch*函数是否比CRT字符串函数的安全版本更安全 StringCchCatW比wcscat更安全吗?这是标记C++,所以你不应该使用它们,但是 STD::WScGe>代码>。 < P>这取决于你在应用程序中如何处理字符串。 有了Windows SDK,许多人最终混合了大量的c-runtime和Windows api调用——因为Windows api是一个c-runtime之上的c-api,Windows程序员很难知道他们在这样做,以及为什么(可能)是错误的 但是,基本上,在应用程序

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


StringCchCatW比wcscat更安全吗?这是标记C++,所以你不应该使用它们,但是<代码> STD::WScGe>代码>。

< P>这取决于你在应用程序中如何处理字符串。 有了Windows SDK,许多人最终混合了大量的c-runtime和Windows api调用——因为Windows api是一个c-runtime之上的c-api,Windows程序员很难知道他们在这样做,以及为什么(可能)是错误的

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

您可以选择使用c运行时字符串支持。这涉及到使用类型为“const char*”或wchar\t的字符串。Microsoft的c-runtime(使用GCC开发windows应用程序是可能的,因此如果您想编写在多个编译器上编译的代码,这种区别可能很重要)提供了一组函数,基于将文本数据存储在,并使用_MBCS和_UNICODE宏将函数从单字符、多字节字符切换到支持宽字符的版本

如果您选择使用c-runtimes字符串抽象,那么使用c-runtimes“安全”字符串routnes将是最有意义的

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


实际上,在一个程序中,最糟糕的事情就是在使用windows API调用和c运行时调用之间不断跳转,因为它们在处理边缘情况时有时有不同的规则。。。这会导致一些很难发现的bug。

什么更安全?你的背景是什么?数据来自哪里?你的意思是要标记这个C吗?如果你必须从一个windows api函数接收一个字符串,只附加一个新行,然后将它传递给另一个api函数,情况会怎样。将其转换为std::wstring,然后追加新行,并将c_str()传递给api函数,这真的更好吗?@Josh:是的。另外,您可以将
wstring
vector
用于临时缓冲区。使用vector会导致缓冲区溢出,就像C字符串代码一样。您是否愿意解释一下为什么在这些情况下使用
std::wstring
更好?您是否愿意解释一下您所关心的危险?我猜是缓冲区溢出。string/wstring使您能够轻松地避免它们。