c++ - 如何正确使用wstrings?

标签 c++ visual-c++ c++17 wstring

我正在学习 wstrings,因为我想了解项目的 UTF-8。我制作了一个简单的程序来使用 wstrings 测试操作:

int main()
{
   std::wstring test;
   std::wstring test2;
   std::wstring test3;
   int n;

   getline(std::wcin, test);

   std::wcout << "\n" << test;

   for (n = 0; n < test.size(); n++)
   {
      test[n] += n * n;
      test2[n] = test[n];
   }
   std::wcout << test2 << "\n";

   for (n = 0; n < test2.size(); n++)
   {
    test2[n] -= n * n;
    test3[n] = test[n];
   }
   std::wcout << test3 << "\n";

  return 0;
}

当我执行它时,我收到此错误:“字符串下标超出范围”

这是我的第一个 C++“严肃”项目,感谢您的帮助!

最佳答案

您的 test2 字符串为空,因此当您这样做时:

test2[n] = test[n];

您正在无效位置建立索引,这会调用未定义的行为。这可能会导致抛出异常。

相反,您可以这样做:

test2.push_back(test[n]);

您对 test3 也有同样的问题,可以用同样的方法修复。


或者,一旦读入 test,您就可以使用适当数量的元素初始化 test2test3:

getline(std::wcin, test);

std::wstring test2(test.size());
std::wstring test3(test.size());

现在您可以毫无问题地索引这些字符串。


此外,对于您的问题,您甚至不需要对 test2 进行任何索引。修改 test 后,您可以像这样简单地分配它:

for (n = 0; n < test.size(); n++)
{
      test[n] += n * n;
}
std::wstring test2 = test;

对于 test3 也类似。

关于c++ - 如何正确使用wstrings?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63832442/

相关文章:

c++ - 对以下程序的输出感到困惑

c++ - 尝试链接 boost::filesystem 以调试 MSVC11 项目时出现链接器错误

c++ - 在循环中初始化结构体时,为什么地址总是相同的?

visual-studio - 如何将 binary_function 更改为 c++17 代码?

c++ - 用户关闭 bb10(z10) 应用程序时,需要很长时间才能访问主屏幕上的应用程序图标

c++ - 无法读取使用相同代码在不同机器上写入的文件

c++ - Ogre3D 显示段错误

c++ - 如何使用http请求只获取字符串名称

c++ - Linux wxwidgets 中的 Freeze() 和 Thaw() 函数问题

c++ - constexpr 函数中的 For 循环无法使用 MSVC 19.23 进行编译