如何将long转换为LPCWSTR?

时间:2009-10-15 14:26:28

标签: c++ string type-conversion

如何在C ++中将long转换为LPCWSTR?我需要与此类似的功能:

LPCWSTR ToString(long num) {
    wchar_t snum;
    swprintf_s( &snum, 8, L"%l", num);
    std::wstring wnum = snum;
    return wnum.c_str();
}

2 个答案:

答案 0 :(得分:5)

您的函数被命名为“to string”,转换为字符串确实比转换为“LPCWSTR”更容易(也更通用):

template< typename OStreamable >
std::wstring to_string(const OStreamable& obj)
{
  std::wostringstream woss;
  woss << obj;
  if(!woss) throw "dammit!";
  return woss.str();
}

如果您的API需要LPCWSTR,则可以使用std::wstring::c_str()

void c_api_func(LPCWSTR);

void f(long l)
{
  const std::wstring& str = to_string(l);
  c_api_func(str.c_str());
  // or 
  c_api_func(to_string(l).c_str());
}

答案 1 :(得分:0)

该函数不起作用,因为wnum.c_str()指向当函数返回时wnum被销毁时释放的内存。

您需要在返回之前复制该字符串,即

return wcsdup(wnum.c_str());

然后当你使用完结果后,你需要释放它,即

LPCWSTR str = ToString(123);
// use it
free(str);