at()无法正常工作

时间:2016-04-13 03:31:59

标签: c++ string

我相信我正在做的一切正确,但字符串没有被分配的字符填充。这是我通过测试得知的:random是正确的字符,q是正确的int,s [i] .name是一个字符串。我尝试过使用.at(q)和[q],但没有任何效果。

这是我的错误:

在抛出' std :: out_of_range'的实例后终止调用   what():basic_string :: at 中止(核心倾销)

for (int i = 0; i < num; i++) {
    int q = 0;
    char random = 50;
    for (; random != 32;) {
        file.get(random);
        s[i].name.at(q) = random;
        q++;
    }
    q = 0;
}
cout << s[0].name;

2 个答案:

答案 0 :(得分:1)

如果这是所有代码,它会崩溃,因为名称并不是在任何地方分配内存。对at的调用要求至少已经为其分配了许多元素才能工作。请尝试调用push_back,这将在字符串后面添加元素,并在必要时展开它。

此外,for的最后一行是多余的,没有必要将q设置为0,因为它会在下一行被破坏,并且在下一个循环中分配了新的q。更不用说使用push_back,用q跟踪索引变得完全冗余。 最后,for正在使事情变得不必要地复杂化,在这种情况下使用。

答案 1 :(得分:0)

这很难,因为你没有给我们完整的代码,但如果我理解你的意图,你应该能够得到类似的东西:

for (int i = 0; i < num; i++) {
    char random = 50;
    s[i].name = "";
    for (; random != 32;) {
        file.get(random);
        s[i].name += random;
    }
}
cout << s[0].name;

如果您的字符串太短,at()将抛出异常。像我一样使用连接应该处理任意大的字符串。