【问题标题】:C++ character visualization in win32 projectwin32项目中的C++字符可视化
【发布时间】:2023-03-29 15:01:01
【问题描述】:

在 win32 项目的可视化过程中我遇到了这个问题,如果我这样做:

char temp[80]="hello";

然后:

MessageBox(hDlg,(LPCWSTR)temp,_T("titolo"),MB_OK);

结果是日文,有什么问题吗? 谢谢。

【问题讨论】:

  • -1 你在这里浪费人们时间的原因是你有一个 C 风格的转换告诉编译器闭嘴,因为你知道你在做什么。 IE。你在对编译器撒谎,这样它就不会告诉你这个问题。然后你让这里的人用他们的时间告诉你编译器会告诉你什么。
  • +1 给 Alf。永远不要对电脑撒谎。

标签: c++ visual-c++ encoding character


【解决方案1】:

问题是LPCWSTR 是一个宽字符数组,而您有一个char 数组。

试试:

wchar_t temp[]= L"hello";

【讨论】:

  • 我唯一的挑剔是它应该是:wchar_t temp[] = L"hello"; _T() 宏是当你想让它为 MBCS 和 UNICODE 编译时——或者你不知道是否它是 UNICODE 或 MBCS。如果你知道它是宽字符,你应该在字符串前面加上“L”来指定它是一个宽字符串——至少在 VC++ 中是这样。
  • @JoeWillcoxson 是的,你是对的。我最初想写TCHAR 而不是wchar_t。 +1 先生。
【解决方案2】:

卢奇安给你基本答案。

在我开始开发 Windows 应用程序的过去,我什至不记得有 Unicode 版本的 Windows。只有多字节字符串。当您使用 Visual C++ 向导创建新应用程序时,它会创建一个应用程序,其中基本字符串字符是“char”。在那里的某个时候,微软预见到 Unicode 是要走的路,他们创建了称为TCHARLPTSTRLPCTSTR 的类型。这些类型的编译方式不同,具体取决于您是否在项目中定义了“UNICODE”。如果您没有定义 UNICODE,则 TCHAR=charLPTSTR=LPSTRLPCTSTR=LPCSTR。但是,如果您定义了 UNICODE,则 TCHAR=WCHAR(或 wchar_t)、LPTSTR=LPWSTR 和 LPCTSTR=LPCWSTR

我仍在开发的当前应用程序不是 UNICODE 应用程序,而是 MBCS(多字节字符串)。在未来的某个时候,我希望它最终会更改为 UNICODE。我一直试图做的是为我的字符串使用TCHAR 类型,以便将来我所要做的就是定义 UNICODE 并且我的所有字符串功能都可以工作。

话虽如此,如果您不知道是否定义了 UNICODE,也可以使用 TCHAR 函数:

TCHAR temp[] = _T("hello");

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多