将 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*
。
如果是这样,有三种可能的解决方案:
-
使用
swscanf
,sscanf
的宽字符版本(推荐);
明确使用CStringA
而不是CString
,因此您使用的是CString
的ANSI 版本;
将您的项目更改为使用多字节字符而不是 unicode(这可以从 Visual Studio 中的项目属性中完成)。
【讨论】:
以上是关于将 CString 隐式转换为 char*的主要内容,如果未能解决你的问题,请参考以下文章
为啥仅在某些情况下才能将字符串文字隐式转换为 char* ? [复制]
ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”