此代码以中文显示hello
char buffer[10]="hello";
AfxMessageBox((LPCTSTR)buffer);
虽然此代码以英文显示
AfxMessageBox(L"hello");
如果我的代码中出现问题,有人可以告诉我如何正确输入缓冲变量吗
答案 0 :(得分:1)
LPCTSTR类型是透明STRing的长指针。 这里重要的是T,透明(至少我认为T代表透明)。
如果您的应用程序编译为ASCII应用程序,则所有T类型(如TCHAR)都将重新定义为ASCII对应项。所以TCHAR将变成简单的char。
如果您的应用程序编译为Unicode,则所有T类型都将重新定义为Unicode类型。 TCHAR变成了wchar_t。
所有Windows(和MFC)功能都是如此。所有Windows功能都有两种变体,一种是ASCII版本(例如MessageBoxA),另一种是Unicode版本(例如MessageBoxW)。 MessageBox本身只是MessageBoxA或MessageBoxW的定义(取决于你如何编译)。
在您的示例中,缓冲区被定义为char-vector类型,但您将其转换为指向透明类型的指针。我假设你的应用程序是用Unicode编译的,所以LPCTSTR实际上是一个“wchar_t *”。所以这个演员是不正确的。
在L之前加上“hello”字符串,告诉编译器将常量“hello”作为Unicode字符串,这使得它成为传递给AfxMessageBox的Unicode版本的正确类型。
答案 1 :(得分:0)
如果在编译器选项中定义了_UNICODE
和UNICODE
标志,则转换字符串LPCTSTR
会将字符串视为unicode字符串。在Windows的情况下,它将每16个字节视为单个字符,并尝试查找相应的unicode字符。要使其显示英文字符,请在定义数组时使用TCHAR
。