c++ - test.exe 中 0x76C9FD62 处的错误未处理异常:Microsoft C++ 异常:内存位置 0x006FF870 处的 std::out_of_range。发生

标签 c++

我尝试将句子中每个单词的第一个字母大写。 谁能解释一下为什么我在输入带有空格 ex(asdasd asdasd) 的单词后出现一些错误。

#include <iostream>
#include <cstring>
#include <vector>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    char str[50];
    char firstLetter;
    int iASCII;
    vector<string> vecString;
    cin.getline(str, 100);
    stringstream ss(str);
    string sIndivWords;
    char cSpace = ' ';

    while (getline(ss, sIndivWords, cSpace))
    {
        vecString.push_back(sIndivWords);
    }

    iASCII = vecString[0].at(0);

    if (iASCII >= 97 && iASCII <= 122)
    {
        for (int i = 0; i < vecString.size(); i++)
        {
            firstLetter = vecString[i].at(0);
            putchar(toupper(firstLetter));
            for (int j = 1; j < 20;j++)
            {
                cout << vecString[i].at(j);
            }
        }
    }


}

最佳答案

正如其他人在他们的评论中所述,您的(非)魔数(Magic Number) 20 是问题所在,此处:

for (int j = 1; j < 20;j++) {
    cout << vecString[i].at(j);
}

vecString[i] 少于 20 个字符时会崩溃!

尝试使用更合适的内容,例如:

for (int j = 1; j < vecString[i].length(); j++) {
    cout << vecString[i].at(j);
}

作为旁注,您尝试使用 vecString.size() 将失败,因为它给您的是单独字符串的数量,而不是任何一个字符串的长度。

关于c++ - test.exe 中 0x76C9FD62 处的错误未处理异常:Microsoft C++ 异常:内存位置 0x006FF870 处的 std::out_of_range。发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247803/

相关文章:

c++ - 我如何使用 ioctl() 在 VxWorks 的套接字上设置 FIONBIO?

c++ - 为什么在这种情况下类型 bool 的输出等于 0?

c++ - 模板和类型转换运算符(operator)

c++ - 当主窗口保持在顶部时,子窗口被遮挡 - MacOS

c++ - 如何修复对 `b2World::b2World(b2Vec2 const&)' 的 undefined reference

c++ - 如何在 C++ 中将空格分隔的字符串拆分为多个字符串?

c++ - 通过子方法 C++ 从父项设置值

c++ - dyld : Library not loaded: libicui18n. 54.dylib 引用自:/usr/local/lib/libxerces-c-3. 1.dylib

c++ - 静态初始化器在库中时被优化掉

c++ - union 函数 C++