我相信我正在做的一切正确,但字符串没有被分配的字符填充。这是我通过测试得知的: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;
答案 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()
将抛出异常。像我一样使用连接应该处理任意大的字符串。