我一直在为课程分配工作,我一直收到一个我无法解决的错误。这是我的一部分代码。
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
const int SIZE = 444;
int main()
{
char person1a[SIZE], person1b[SIZE], person2a[SIZE], person2b[SIZE], person3a[SIZE], person3b[SIZE],
person4a[SIZE], person4b[SIZE];
inData >> person1a[SIZE], person1b[SIZE], person2a[SIZE], person2b[SIZE], person3a[SIZE], person3b[SIZE], person4a[SIZE], person4b[SIZE];
return 0;
}
代码还有更多,但我已将问题缩小到这些行。无论我如何安排它们或我使用的操作符,我总是在第一个数组得到一个堆栈错误。我至少尝试过这个显而易见的事情,比如
inData >> person1a;
inData >> person1b;
etc
inData >> person1a >> person2b >> etc
等等,但我无法克服这个错误。
我在这里遗漏了一些明显的东西,如果我能帮助我,可以帮助我吗?
为了记录,我知道有几个关于这个的主题已经,但我现在只在学校开设我的第一个编程课,所有其他主题都有很多额外的内容,我无法理解。
答案 0 :(得分:2)
您的数组声明为:
char person1a[SIZE];
访问数组时有效的下标是0
到SIZE-1
声明:
inData >> person1a[SIZE], person1b[SIZE], person2a[SIZE], person2b[SIZE], person3a[SIZE], person3b[SIZE], person4a[SIZE], person4b[SIZE];
你正在写一个超过为每个数组分配的内存。
因为,您使用的是C ++,所以应该使用std::string
而不是c风格的数组
它可以为您节省所有这些问题,并提供字符数组为您提供的所有功能。
答案 1 :(得分:2)
当您访问person1a[SIZE]
等时,您正在违反数组边界
数组索引从0开始,因此最大索引为SIZE-1
而非SIZE
答案 2 :(得分:2)
inData >> person1a[SIZE]
假设inData
是某种std::istream
或类似的,它将单个字符流式传输到数组的元素SIZE
中。由于这是数组的大小,并且有效索引在[0,SIZE-1]
范围内,因此它会超出数组而导致堆栈损坏。
如果您打算读取一个字符串,请读入数组本身:
inData >> person1a
当然,如果用户输入太多字符,这也会导致损坏,因此请使用std::string
来存储字符串,而不是乱用字符数组。
此外,要链接到多个链接>>
:
inData >> person1a >> person1b >> ...;
您的代码使用逗号运算符,这意味着您实际上只是流式传输到person1a
,并且该语句的其余部分无效。