【发布时间】:2012-11-01 20:26:11
【问题描述】:
我正在用 C++ 开发一个小型 Win32 应用程序。
我很久以前就研究过C++基础知识,所以现在我完全被C++中的字符串弄糊涂了。没有WCHAR 或TCHAR,只有char 和String。
经过一番调查,我决定不使用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; 而不会丢失任何内容?
附:由于我是俄罗斯人,所以问题可能不清楚。现在让我谈谈这一点,我将尝试更清楚和更复杂地解释我的问题。
【问题讨论】:
-
您应该使用
wchar_t和std::wstring。并阅读有关指针的更多信息,因为您的最后一个代码 sn-p 使用未初始化的指针复制数据,这意味着您可以覆盖进程内存中的任何内容。 -
我一定会读到关于指针的!
-
我添加了标签
string。 -
那你应该知道使用未初始化的指针是不好的吧?
-
是的,当然!我在学校学习的时候学过指针,但这是很久以前的事了,所以我需要更新一下知识。非常感谢!
标签: c++ string winapi char wchar