Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++下标字符串范围-我在哪里出错?_C++_String - Fatal编程技术网

C++下标字符串范围-我在哪里出错?

C++下标字符串范围-我在哪里出错?,c++,string,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>"); g

我在哪里犯错

#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。

slogovi的长度始终保持为0。我知道您试图用slogovi[broj]=input[I]来更改它,但您甚至不能使用[]运算符,因为长度为0。

slogovi的长度始终保持在0。我知道您试图用slogovi[broj]=input[I]来更改它,但您甚至不能使用[]运算符,因为长度为0。

: 返回对指定位置的字符的引用。不执行边界检查。如果pos>size,则行为未定义

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

: 返回对指定位置的字符的引用。不执行边界检查。如果pos>size,则行为未定义


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

哦,我更新了代码,我使用了c,而不是定义了c=input.length;slogvi[broj]获取的值超出了其当前大小。您可以使用string::at而不是[]来检测错误。然后,除了崩溃之外,还会显示一个std::out_of_range异常,让您知道错误;slogvi[broj]获取的值超出了其当前大小。您可以使用string::at而不是[]来检测错误。然后将显示std::out_of_range异常,让您知道错误,而不仅仅是崩溃。这是否回答了您的问题?或者,你需要更多的解释吗?完全放弃了。。。我真的应该休息一下。谢谢解决这个问题的一个方法就是在字符串中使用append操作符+=这样你就不会越界,或者你可以使用resize,比如@MOJNICK points,这能回答你的问题吗?或者,你需要更多的解释吗?完全放弃了。。。我真的应该休息一下。谢谢解决这个问题的一个方法就是在字符串中使用append操作符+=这样就不会越界,或者可以像@MOJNICK指出的那样使用resize