【问题标题】:c++ - string subscript out of range - where am I making a mistake?c++ - 字符串下标超出范围 - 我在哪里犯了错误?
【发布时间】:2017-11-23 23:34:09
【问题描述】:

我在哪里犯错了?

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

【问题讨论】:

  • 哦忘了我更新了代码,我用 c 代替(定义 c = input.length();)
  • slogvi[broj] 的值超出其当前大小
  • 您可以使用string::at() 而不是[ ] 来检测错误。然后,将显示 std::out_of_range 异常,而不只是崩溃,让您知道错误。

标签: c++ string


【解决方案1】:

slogovi 的长度始终保持在0。我了解您正在尝试使用slogovi[broj]=input[i] 更改它,但您甚至不能使用[] 运算符,因为长度为0.

【讨论】:

  • 这能回答你的问题吗?或者,您需要更多解释吗?
  • 完全忘记了...我真的应该休息一下。谢谢
  • 解决此问题的一种方法是仅对字符串使用附加运算符 +=,这样您就不会超出范围,或者您可以像 @MOJNICK 指出的那样使用调整大小
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多