【问题标题】:convert CStdStringW to TCHAR *将 CStdStringW 转换为 TCHAR *
【发布时间】:2011-08-11 10:27:01
【问题描述】:

我有一段最初使用 CString 的代码。由于 VSExpress 用户无法使用它,我将其替换为在以下位置找到的 CString“克隆”: http://www.codeproject.com/KB/string/stdstring.aspx

这个克隆可以正常工作,但使用时仍然存在一个问题:

TCHAR *GetConnectionString(){return m_szConnectionString)}; 

我收到错误“不存在从“CStdStringW”到“TCHAR *”的合适转换”,由于字符串处理不是我的强项,我不知道如何解决这个问题。好的,我知道我可能需要进行某种类型转换,但是.... 整个代码可以在以下位置找到: Use CString in console app when using VS Express

好吧,祝你有美好的一天,希望有人能帮助我。

问候隆皮

【问题讨论】:

  • 你应该使用 std::string os std::wstring

标签: c++ casting


【解决方案1】:

一旦你提交了一个非标准的字符串类,你就不得不使用它。你应该改变返回值类型:

CStdString GetConnectionString() {
    return m_szConnectionString;
};

另一种选择是将返回类型从 TCHAR 更改为 const TCHAR:

const TCHAR* GetConnectionString() {
    return (LPCTSTR)m_szConnectionString;
};

这不是一个很好的解决方案,当调用代码存储指针并更改连接字符串时,它会惨遭失败。顺便说一句,这也是原始代码中的一个缺陷。

【讨论】:

  • 感谢您的建议!我会记住这个问题。可能会以艰难的方式学习它(“它会惨败……”),但我会尝试立即实施您的建议。隆皮
【解决方案2】:

根据您发布的链接,CStdString 派生自 basic_string<TCHAR>。因此,您可以使用它的c_str() 方法。

const TCHAR *GetConnectionString()
{
    return m_szConnectionString.c_str();
}

【讨论】:

  • 谢谢弗雷德里克!现在它编译没有错误!我真的很讨厌存在大约 50 亿种不同类型的字符串和字符的事实。好的,我知道有一些不同的基本版本,但对我来说,感觉就像我每天都发现一个新的“字符串问题”。无论如何,谢谢你的帮助!
  • @Lumpi,你认为 C++ 有字符串问题吗?您应该在某个时候尝试纯 C,这样您就可以看到 真正的 字符串问题是什么(提示:没有字符串类型;)
猜你喜欢
  • 2011-11-13
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2019-01-05
  • 1970-01-01
相关资源
最近更新 更多