将CString隐式转换为char *

时间:2011-08-08 05:47:50

标签: c++ visual-c++ mfc

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

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

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

当我尝试编写自己的简单代码时,问题出在这里,该代码试图以相同的方式操作CString变量,但编译器说不能将CString转换为cahr *

1 个答案:

答案 0 :(得分:2)

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

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

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