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?

MFC CString

SWIG 'cstring.i' Python 返回字节类型而不是字符串类型

CString字符串查找和截取

c++ 在使用 tolower 时使用 c 字符串格式化错误

CString中Format函数与格式输入与输出