1

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

StringCchCatW 比 wcscat_s 更安全吗?还是 StringCchCopyW 与 wcscpy_s?

4

2 回答 2

2

这被标记为 C++,所以你不应该使用它们中的任何一个,std::wstring而应该使用它们。

于 2012-04-18T13:33:50.433 回答
0

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

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

但是,基本上,在应用程序开发的某个阶段,您确实应该选择从哪里获取基本数据类型。尤其是字符串数据作为本地化api的情况下,排序、排序等效果就大不一样了。

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

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

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

确实,您在程序中可以做的最糟糕的事情是不断在使用 Windows API 调用和 c-runtime 调用之间来回切换,因为它们有时对于如何处理边缘情况有不同的规则......这可能会导致一些非常很难发现错误。

于 2012-04-18T16:15:59.643 回答