如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
how to convert char* to LPCTSTR in c++(MFC)
我必须制作访问.txt文件的MFC应用程序。 以下代码是给定模板文件的一部分:
fopen(dlg.GetPathName());
但是,当我尝试运行给定的模板文件时,我收到错误,指示 char* 无法转换为 LPCTSTR。 我在网上做了一些研究,像这样更正后程序运行良好:
USES_CONVERSION;
const char* cstr;
cstr = T2A((LPCTSTR)dlg.GetPathName());
~
fp = fopen(cstr, "r");
我之所以提到这一点,是因为我的编译器(VS 2017 社区)可能默认使用 unicode。我认为这是解决上述问题的关键:
我在窗口编辑控件上打印结果时出现问题。
m_Result.SetWindowTextW((LPCTSTR)Result);
结果包含要在编辑控件中显示的消息,其类型为 char*。每当我运行程序时,结果都会以空白框□或中文显示。我尝试使用 A2T 和 CA2T 转换结果,但这些都不起作用。
第一个错误可以通过使用Microsoft的_wfopen()
函数(或TCHAR
等效函数,_tfopen()
来匹配GetPathName()
而不是fopen()
的TCHAR
性质来修复。 这样,您根本不需要将输入字符串转换为char*
:
fp = _wfopen(dlg.GetPathName(), L"r");
fp = _tfopen(dlg.GetPathName(), _T("r"));
在第二个错误中,如果Result
char*
(或隐式转换为char*
的东西)并且LPCTSTR
映射到const wchar_t*
(因为定义了UNICODE
),那么您可以使用CA2CT
就可以了:
m_Result.SetWindowTextW(CA2CT(Result));
但是,由于SetWindowTextW()
只期望wchar_t*
而从不TCHAR*
,因此请改用CA2CW
:
m_Result.SetWindowTextW(CA2CW(Result));
或者,如果可能的话,您应该首先将Result
更改为使用wchar_t
而不是char
,这样您就不再需要转换了:
m_Result.SetWindowTextW(Result);
相关文章:
- 将无符号char*转换为std::istream*C++
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将函数参数"const char*"转换为"std::string_view"是
- C ++如何在使用"tolower"时将char转换为int
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- JavaCPP 错误:无法将参数"1"的"char*"转换为"Abc*
- 为什么从 char 转换为 std::byte 可能是未定义的行为?
- 如何在虚幻引擎4中将char*转换为TCHAR?
- C++:将模板类型 char 转换为 std::string
- strcmp/char* 转换无法按预期工作
- C++中的SQLite char*转换
- 无法从 const char* 转换为 const char *&
- 在 C++ 中将 char 转换为 int,而无需符号位传播
- 如果必须包含西里尔字符,如何将 char* 转换为 std::string?
- 试图使用strCMP时的char转换错误
- 无法从'const char *'转换为'LPCTSTR'
- 将 std::vector<char> 转换为字符* 会导致字符缺陷
- 使用 static_cast 将 char 转换为 int c++
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 无法将const char转换为字符串构造字符串