我正在学习wstring,因为我想了解一个项目的UTF-8。我制作了一个使用wstring测试操作的简单程序:
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++“严肃”项目,任何帮助都是非常感谢的!
发布于 2020-09-10 15:01:07
您的test2字符串是空的,所以当您这样做时:
test2[n] = test[n];您正在一个无效的位置进行索引,这会调用未定义的行为。这可能导致抛出异常。
相反,您可以这样做:
test2.push_back(test[n]);test3也有同样的问题,您可以用同样的方式修复它。
或者,在test中读取之后,可以使用适当数量的元素初始化test2和test3:
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也是如此。
https://stackoverflow.com/questions/63832442
复制相似问题