c++ - 为什么要使用 Cstring 而不是 wchar_t

标签 c++ visual-c++

我有一段代码,其中同时使用了 Cstring 和 wchar_t。我想我可以用 wchar_t 而不是 Cstring 做同样的工作,所以为什么要使用 Cstring。

在 m_szChargeType 和 m_szConfirmedChargeType 中我有 A。 起初我的代码是

wchar_t m_szChargeType[LEN_CHARGE_TYPE];
wchar_t m_szConfirmedChargeType[LEN_CHARGE_TYPE];
LoadString(GetResourceInstance(),IDS_MS_CI_TYPEA,m_szChargeType,LEN_CHARGE_TYPE);//      fills value A in m_szChargeType
LoadString(GetResourceInstance(),IDS_MS_CI_TYPEA,m_szConfirmedChargeType,LEN_CHARGE_TYPE);        // fills value A in m_szConfirmedChargeType   
CString strSpace(IDS_MS_SPACE); //IDS_MS_SPACE has a space in rc file and IDS_MS_TYPE   have rate in ini file
CString strType(IDS_MS_TYPE);
strSpace += strType;
wsprintf(m_szChargeType, _T("%s%s"), m_szChargeType, strSpace);
wsprintf(m_szConfirmedChargeType, _T("%s%s"), m_szConfirmedChargeType, strSpace);

m_szChargeType 和 m_szConfirmedChargeType 的结果是 A0,但预期是 A Rate

然后我做了

wchar_t strSpace[LEN_CHARGE_TYPE];
wchar_t strType[LEN_CHARGE_TYPE];
LoadString(GetResourceInstance(),IDS_MS_SPACE,strSpace,LEN_CHARGE_TYPE);
LoadString(GetResourceInstance(),IDS_MS_TYPE,strType,LEN_CHARGE_TYPE);
wsprintf(m_szChargeType, _T("%s%s%s"), m_szChargeType, strSpace, strType);
wsprintf(m_szConfirmedChargeType, _T("%s%s%s"), m_szConfirmedChargeType, strSpace, strType);  

它运行良好。并且输出与预期的 A RATE 相同

最佳答案

CString 是一个类,因此它提供了功能。 wchar_t 只是一个基本类型,它表示一个单个 宽字符。我假设您在谈论 wchar_t*

就像问为什么你应该使用 std::string 而不是 char*

关于c++ - 为什么要使用 Cstring 而不是 wchar_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187002/

相关文章:

c++ - Linux 的 _bstr_t 的极简实现

visual-c++ - 在 VC++ 中是否有在头文件和源文件之间移动的快捷方式?

c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效

c++ - 如何在完美转发中有效地将右值引用转为左值

c++ - 在 C++ 中使用调用查找函数定义

c++ - 我的源字符串采用哪种编码?

c++ - 使用模板参数作为模板参数类型

c++ - emplace(std::move(key), std::move(value)) vs emplace(std::make_pair(key, value))

c++ - 使用 boost::math::ibeta 时出错

.net - 我想弹出我自己的对话框(在服务器上保存文件而不询问目标路径位置)而不是 adobe 的另存为对话框