如何正确使用wstrings?

问题描述

我正在学习有关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同样。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...