gpt4 book ai didi

C++ WCHAR 操作

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:28 35 4
gpt4 key购买 nike

我正在用 C++ 开发一个微型 Win32 应用程序。我很早以前就学过C++基础知识,所以现在我完全被C++中的字符串搞糊涂了。没有 WCHARTCHAR 只有 charString。经过一些调查后,我决定不使用 TCHAR

我认为我的问题非常简单,但我找不到如何在 C++ 中操作字符串的明确指南。受近几年 PHP 编码的影响,我曾期望一些简单的字符串操作,但我错了!

很简单,我只需要将新数据放入一个字符串即可。

    WCHAR* cs = L"\0";
swprintf( cs, "NEW DATA" );

这是我的第一次尝试。在调试我的应用程序时,我调查过 swprintf 只将前 2 个字符放入我的 cs var。我已经通过这种方式解决了我的问题:

    WCHAR cs[1000];
swprintf( cs, "NEW DATA" );

但通常这个技巧可能会失败,因为在我的例子中,新数据不是常量值而是另一个变量,它可能更宽,长度超过 1000 个字符。我的代码是这样的:

    WCHAR cs[1000];
WCHAR* nd1;
WCHAR* nd2;
wcscpy(nd1, L"Some value");
wcscpy(nd2, L"Another value"); // Actually these vars stores the path for user selected folder
swprintf( cs, "The paths are %s and %s", nd1, nd2);

在这种情况下,nd1 和 nd2 的总字符数可能会超过 1000 个字符,因此关键数据将会丢失。

问题是如何将我需要的所有数据复制到以这种方式声明的 WCHAR 字符串 WCHAR* wchar_var; 而不会丢失任何内容?

附言由于我是俄罗斯人,所以这个问题可能不清楚。现在让我谈谈这个,我会尝试更清楚和更复杂地解释我的问题。

最佳答案

在现代 Windows 编程中,可以忽略 TCHAR 而使用 wchar_t (WCHAR) 和 Unicode UTF-16。

(TCHAR 是过去的模型,当您想要拥有单一代码库并生成 ANSI/MBCS 和 Unicode 版本时,更改一些预处理器开关,如 _UNICODEUNICODE。)

无论如何,您应该使用 C++ 和方便的字符串类 来简化您的代码。您可以使用 ATL::CString(对应于 Unicode 构建中的 CStringW,这是自 VS2005 以来的默认设置),或 STL 的 std::wstring.

使用 CString,您可以:

CString str1 = L"Some value";
CString str2 = L"Another value";
CString cs;
cs.Format(L"The paths are %s and %s", str1.GetString(), str2.GetString());

CString 还提供了适当的 operator+ 重载来连接字符串(因此您不必计算结果字符串的总长度,为目标字符串或检查现有缓冲区大小,调用 wcscpywcscat,不要忘记释放缓冲区等)

您可以简单地将 CString 的实例传递给需要 const wchar_t* (LPCWSTR/PCWSTR) 参数的 Win32 API,因为 CStringconst wchar_t* 提供隐式转换运算符。

关于C++ WCHAR 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360228/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com