CString 格式返回奇怪的字符
Posted
技术标签:
【中文标题】CString 格式返回奇怪的字符【英文标题】:CString format return weird character 【发布时间】:2015-12-29 13:22:57 【问题描述】:student1 的名字正确打印为“alice”,但 student2 的名字打印为“奇怪的字符”。
char * student;
student = "alice";
printf("student1 : %s\n", student);
CString student2;
student2 = "alice";
student = (char *)( LPCSTR )student2;
printf("student2:%s\n", student);
为什么在使用 "(char *)( LPCSTR )" 进行转换后,它会返回奇怪的字符?
【问题讨论】:
在您的项目设置中,您是使用Unicode、MBCS还是其他字符集进行编译? 你的问题标题是关于CString.Format
。但是你已经从你的问题中删除了CString.Format
!
CString 是 unicode 字符串,不能转换成 ASCII 字符串。
@杜嘉恩:错了。根据项目设置和包含文件,CString
可以表示单字节、MBCS 或 Unicode 字符集。见template CStringT
@DUJiaen:我的错,之前我认为使用“CString.Format”会导致那些奇怪的字符。
【参考方案1】:
首先,这个程序对我有用。
但是,这并不意味着它是正确的。
对于 MBCS,您通常使用 _T
宏来确保正确声明您的字符串。
这是我对您的代码的简单重写:
#include "stdafx.h"
#include "atlstr.h"
int _tmain(int argc, _TCHAR* argv[])
LPCSTR student = _T("alice"); // Use the provided LPCSTR type instead of char*.
printf("student1 : %s\n", student);
CString student2(_T("alice")); // Initialize a CString with the _T macro
student = (LPCSTR)student2; // LPCSTR is typedef to char*.
// So you effectively had (char*)(char*)student2;
// TypeCasting something twice to the same type is stupid.
printf("student2:%s\n", student);
return 0;
输出
student1 : alice
student2:alice
【讨论】:
以上是关于CString 格式返回奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2008中字符串头文件不是cstring是string?
SWIG 'cstring.i' Python 返回字节类型而不是字符串类型