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

时间:2019-10-05 11:17:12

标签: 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);
            }
        }
    }


}

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中指出的那样,您的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()将会失败,因为这将为您提供单独的字符串数,而不是任何一个字符串的长度。

相关问题