【问题标题】:C++ Convert int to wchar_t*C++ 将 int 转换为 wchar_t*
【发布时间】:2018-10-09 03:34:53
【问题描述】:

所以我一直在尝试将整数值转换为 wchar_t*。这是我运行的测试,所以我可以尽可能地简化它。

int test=123;
wchar_t *testc[12][12];testc[0][0]=L"hello";
_itow(test,testc[0][0],10);
wcout<<testc[0][0];

这里的代码可以编译,但也给了我厄运的 Not Responding 错误。 我的理解非常奇怪的是为什么会这样

int test=123;
wchar_t *testc[12][12];testc[0][0]=L"hello";
_itow(test,testc[1][0],10);
wcout<<testc[0][0]<<testc[1][0];

正常工作,并按预期显示输出“hello123”。

知道为什么会这样吗?

我的项目中出现了一些与显示的第一个代码类似的情况(除了 wcout 部分),因此我想了解为什么它们会给我 Not Responding 状态。

【问题讨论】:

  • 我认为两者都不会编译。至少它不会编译here。请发帖minimal reproducible example
  • testc 只是一组指针,但它们并不指向任何地方。所以没有地方存储转换的结果。您可以尝试 std::to_wstring(test) 并跳过指针。
  • 你的 testc[1][0] 没有指向任何可能对第二种情况造成问题的地方
  • 旁注:永远不要让非常量指针指向字符串字面量——这实际上是testc[0][0]=L"hello"; 正在做的事情。该文字位于只读存储器中。一旦您尝试通过testc 对其进行写入,您将得到未定义的行为:可能是段错误。

标签: c++ int wchar-t


【解决方案1】:

您的代码的主要问题是没有为 testc[1][0] 分配内存。 此外,最好使用标准 c++ 函数,例如 std::to_wstring 而不是 _itow。

所以这里是您的问题的示例代码:

int main()
{
  int test=123;
  wchar_t *testc[12][12];
  testc[0][0]=L"hello";
  testc[1][0] = new wchar_t[4];
  std::wstring temp  = std::to_wstring(123);
  for(int i=0;i<temp.length();i++)
  {
      testc[1][0][i] = temp[i];
  }
  wcout<<testc[0][0]<<testc[1][0];    
  return 0;
}

这只是示例代码,我假设在您的程序中您正在处理内存分配和释放

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 2021-07-31
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2017-12-12
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多