【问题标题】:C++ How can I convert wchar_t* to TCHAR [] (not TCHAR*)C++ 如何将 wchar_t* 转换为 TCHAR [](不是 TCHAR*)
【发布时间】:2016-10-28 11:37:17
【问题描述】:

我想为一个大单元添加一个小的附加选项,所以我不想处理大量代码。

TCHAR szTempFileName[MAX_PATH];
TCHAR lpTempPathBuffer[MAX_PATH];
int uRetVal = 0;
GetTempPath(MAX_PATH,          // length of the buffer
    lpTempPathBuffer); // buffer for path 
GetTempFileName(lpTempPathBuffer, // directory for tmp files
    TEXT("QRCode_"),     // temp file name prefix 
    0,                // create unique name 
    szTempFileName);  // buffer for name 

我想将 szTempFileName 更改为可选的 wstring/std::string/wchar_t* 参数。

解决方案:

  1. 将 TCHAR 更改为 wchar_t

  2. wcscpy(wchar_t[], wchat_t*);

【问题讨论】:

  • wchat_t* 更改为TCHAR 是没有意义的,TCHAR 是单个字符,而wchat_t* 可以是多个字符。请注意,TCHAR[]TCHAR* 在大多数情况下是可以互换的。
  • 你的意思是你只想要宽字符串中的一个字符吗?
  • 没有错,我尝试将 wchar_t* 转换为 TCHAR[] wchar_t* w = L"somewchart"; TCHAR t = ....

标签: c++ tchar


【解决方案1】:

通常,根本没有理由使用TCHARs。如果您仍然使用wchar_t,只需通过添加W 后缀直接调用Winapi 函数的Unicode variants

// Use wchar_t instead of TCHAR.
wchar_t szTempFileName[MAX_PATH];
wchar_t lpTempPathBuffer[MAX_PATH];
int uRetVal = 0;
// Call GetTempPathW directly.
GetTempPathW(MAX_PATH, lpTempPathBuffer);
// Use L"..." instead of TEXT("...").
GetTempFileNameW(lpTempPathBuffer, L"QRCode_", 0, szTempFileName);

【讨论】:

    【解决方案2】:

    坚持你所拥有的并在最后转换为适当的字符串类型。让 Windows 与 C++ 字符串类型很好且正确地播放可能会让你的头发变白。

    使用以下 typedef 创建可以在整个代码中使用的字符串类型,而不是 std::string 或 std::wstring:

    typedef std::basic_string<TCHAR> tstring;
    

    直接从缓冲区构造你的字符串:

    tstring RealFileName(szTempFileName);
    

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 2011-11-13
      • 2013-10-18
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      相关资源
      最近更新 更多