将 CString 隐式转换为 char*

Posted

技术标签:

【中文标题】将 CString 隐式转换为 char*【英文标题】:Implicit convert CString to char* 【发布时间】:2011-08-08 05:47:49 【问题描述】:

我已经下载了一个示例代码,因此该代码中有一些 CString 变量作为 char* 传递给 sscanf() 函数,编译器隐式转换这些 CString 并且代码编译正常。工作正常的代码在这里:

CString m_strVersionXFS;
m_strVersionXFS = _T("00029903");

DWORD nVersion;
sscanf(m_strVersionXFS,"%08X",&nVersion);

当我尝试编写自己的简单代码尝试以相同的方式操作 CString 变量但编译器说不能将 CString 转换为 cahr*

时,问题就在这里

【问题讨论】:

只是一些小的更正:它是const char*,而不是char*。你不能让它成为非常量。 【参考方案1】:

我怀疑您自己的代码正在使用 unicode(UNICODE 常量定义)。这意味着CString 正在使用宽字符,并将隐式转换为wchar_t*,但不会转换为char*

如果是这样,有三种可能的解决方案:

    使用swscanfsscanf 的宽字符版本(推荐); 明确使用CStringA 而不是CString,因此您使用的是CString 的ANSI 版本; 将您的项目更改为使用多字节字符而不是 unicode(这可以从 Visual Studio 中的项目属性中完成)。

【讨论】:

以上是关于将 CString 隐式转换为 char*的主要内容,如果未能解决你的问题,请参考以下文章

为啥仅在某些情况下才能将字符串文字隐式转换为 char* ? [复制]

ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”

Java - 为啥 char 不应该被隐式转换为字节(和短)原语?

调用 printf 时隐式转换为 char*

C++ --- 强制转换运算符

为啥这里不发生隐式转换?