首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确操作wstring?

如何正确操作wstring?
EN

Stack Overflow用户
提问于 2020-09-10 14:59:25
回答 1查看 72关注 0票数 2

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

代码语言:javascript
复制
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++“严肃”项目,任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 15:01:07

您的test2字符串是空的,所以当您这样做时:

代码语言:javascript
复制
test2[n] = test[n];

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

相反,您可以这样做:

代码语言:javascript
复制
test2.push_back(test[n]);

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

或者,在test中读取之后,可以使用适当数量的元素初始化test2test3

代码语言:javascript
复制
getline(std::wcin, test);

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

现在您可以索引到这些字符串中,而不会出现任何问题。

另外,针对您的问题,您甚至不需要对test2进行任何索引。一旦修改了test,就可以像这样简单地分配它:

代码语言:javascript
复制
for (n = 0; n < test.size(); n++)
{
      test[n] += n * n;
}
std::wstring test2 = test;

test3也是如此。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63832442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档