从字符串转换为 LPCTSTR 时遇到问题

Posted

技术标签:

【中文标题】从字符串转换为 LPCTSTR 时遇到问题【英文标题】:Having trouble converting from string to LPCTSTR 【发布时间】:2012-10-03 11:51:46 【问题描述】:

我正在尝试将一些文本放入静态文本小部件中,如下所示:

m_StartupTime.SetWindowText(someStringVariable);

并得到一个错误:

'CWnd::SetWindowTextA' : 无法将参数 1 从 'std::string' 转换为 'LPCTSTR'

我曾尝试使用c.str() 方法,但是当我这样做时,程序编译正常,但在运行时崩溃,抛出错误:

所以我正在弄清楚问题是否与转换有关,还是与此有关?

使用 CString 并不能解决问题,我尝试从 Unicode 字符集切换到多字节,但没有成功。哦,我在 MFC 中开发。

编辑:找到解决方案!我使用了 CString 类。

string a = "smth";
CString str(a.c_str());

【问题讨论】:

你检查过someStringVariable 吗?可能已损坏 str.c_str() 为您提供一个 const char *,它是一个 LPCSTR(指向 C 字符串的长指针)。所以你的问题不在于这个函数,而在于其他地方。 m_StartupTime.SetWindowText(CString(someStringVariable.c_str())); 你的问题让我很困惑。你的项目是 Unicode 还是不是?这两个中的哪一个会编译m_StartupTime.SetWindowText("")m_StartupTime.SetWindowText(L"") 辩证法:第二个。它是 Unicode。 【参考方案1】:

断言对话框显示断言发生的位置:文件 winocc.cpp,第 246 行。

查看代码,这是该文件中的行:

ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

您的断言似乎与字符串无关,但控件不存在(还没有?),即控件窗口无效或不存在。

【讨论】:

【参考方案2】: CA2T str(someStringVariable.c_str()); m_StartupTime.SetWindowText(str);

假设 someStringVariable 具有 std::string 类型。包括 AtlBase.h 来编译它。

【讨论】:

以上是关于从字符串转换为 LPCTSTR 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

c++字符串LPCTSTR格式转化为char*

将 const char* 转换为 LPCTSTR

LPCTSTR和LPCSTR转换

c++ 从 LPCTSTR 转换为 const char *

C++CString转换为const char *类型

C++ string如何转换为BSTR类型