c ++ - 字符串下标超出范围 - 我在哪里犯了错误?

时间:2017-11-23 23:34:09

标签: c++ string

我在哪里弄错了?

#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <sstream>

using namespace std;

string input = "";
string slogovi = "";

int broj = 0;

void main()
{
    printf("Please enter a valid name:\n>");
    getline(cin, input);
    int c = input.length();
    for (int i = 0; i < c; i++) {
        if (input[i] == 'a' || input[i] == 'e' || input[i] == 'i' || input[i] == 'o' || input[i] == 'u') {
            slogovi[broj] = input[i];
            slogovi[broj + 1] = '-';
            broj += 2;
        }
        else {
            slogovi[broj] = input[i];
            broj++;
        }
    }

    printf("%s", slogovi);
    system("pause");
}

线程0x14d0已退出,代码为-1073741510(0xc000013a)。 程序'[5452] Strings.exe'已退出,代码为-1073741510(0xc000013a)。

2 个答案:

答案 0 :(得分:2)

slogovi的长度一直保持在0。我们了解到您尝试使用slogovi[broj]=input[i]进行更改,但您甚至无法使用[]运算符,因为长度为0.

答案 1 :(得分:2)

http://en.cppreference.com/w/cpp/string/basic_string/operator_at: “返回对指定位置pos处的字符的引用。不执行边界检查。如果pos&gt; size(),则行为未定义。”

您可以使用resize()方法,因为字符串的大小为0。