【问题标题】:How to add integer to LPWSTR如何将整数添加到 LPWSTR
【发布时间】:2014-01-23 17:03:06
【问题描述】:

我有一个函数,它只接受一个 LPWSTR 作为参数。但是,我需要在它的末尾添加整数。

这是一个示例伪代码:

int theNumber = 5;
LPWSTR myLPWSTR = L"Number is: ";
/* Add theNumber to myLPWSTR */
myFunction(myLPWSTR);

如何做到这一点?

我已经尝试将int 转换为LPWSTR,然后将它们连接起来,但我没有成功。我已经尝试了整个早上,但就是不知道如何做到这一点。

我试过了,例如。 wsprintf、_itow_s、c_str 以及我所知道的几乎所有东西——但就是做不到,这真的很令人沮丧。

请有人帮忙。

【问题讨论】:

  • 你能贴出你试过的(一些)代码吗?
  • 请注意,您不能修改myLPWSTR,因为它指向常量数据。

标签: c++ function unicode int concatenation


【解决方案1】:

假设该函数确实需要 LPWSTR 而不是 LPCWSTR(即它可以修改传入的字符串),您必须执行以下操作:

int theNumber = 5;
std::wostringstream s;
s << L"Number is: " << theNumber;
std::wstring str = s.str();
std::vector<wchar_t> buf(str.begin(), str.end());
buf.push_back(0);
myFunctions(&buf[0]);

这是必要的,因为您需要提供一个正确的以 nul 结尾且可修改的缓冲区 wchar_ts。 str.c_str() 以 nul 结尾,但不可修改。 &amp;str[0] 是可修改的,但不是(保证是)nul 终止的。

【讨论】:

  • @chris 当然,谢谢;编辑。我最初在那里有一个+ 1,然后决定使用push_back() 并且没有更新它。显然,即使在 8 行示例中,您也可以得到代码异味。
  • 呵呵 :) 最后一句的小注释仅适用于 pre-C++11。从 C++11 开始,它是一个有效的 C 字符串,并且可以修改为不包括隐式 null。 Pre-C++11 也有可能的不连续性。
  • @chris 你有 C++11 的报价吗?我所能找到的只是s[s.size()] 引用了NUL,而&amp;*(s.begin() + n) == &amp;*s.begin() + n0 &lt;= n &lt; s.size() 保留。
  • 这既是隐含的空值又是连续性,但您可能会发现我的相关@​​987654321@ 很有帮助。
  • @chris 谢谢,我想我现在明白了。我只是对它不(明确)要求&amp;*(s.begin() + s.size()) == &amp;*s.begin() + s.size() 持有这一事实感到困惑。
【解决方案2】:

如果你可以使用C++11

std::wstring str = L"Number is: ";
str += std::to_wstring(42);
myFunction( str.data() );

如果没有:

std::wstringstream ss;
ss << L"Number is: " << 42;
myFunction( ss.str().c_str() );

不要忘记包含 stringsstream

【讨论】:

  • 如果函数采用LPWSTR,则不会。您必须使用 &amp;str[0] 并且不要让它修改隐式 null。请注意,此方法仅适用于 C++11 及更高版本。另请注意,data() 等价于 C++11 中的 c_str()
  • 这将是简短而好的,但我收到一个错误:错误 C2664: 'myFunction' : cannot convert parameter 1 from 'const wchar_t *' to 'LPWSTR' 。我现在将检查其他建议,谢谢:)
  • 您的函数是否必须采用 LPWSTR ?你不能把它改成 LPCWSTR 吗?如果没有,请使用 Angews 版本将新字符串复制到向量中并使用它。
  • Visual Studio 需要包含哪些标头才能识别“std”?
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多