C++ 是什么导致了错误;围绕变量'';“腐败了”;在我的节目里

C++ 是什么导致了错误;围绕变量'';“腐败了”;在我的节目里,c++,visual-studio-2010,C++,Visual Studio 2010,我一直在为班级做作业,我不断地遇到一个我看不到可以纠正的错误。这是我代码的一部分 #include <iostream> #include <string> #include <fstream> #include <iomanip> using namespace std; const int SIZE = 444; int main() { char person1a[SIZE], person1b[SIZE], person2a[SI

我一直在为班级做作业,我不断地遇到一个我看不到可以纠正的错误。这是我代码的一部分

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

}
等等,但我就是不能克服这个错误

我是否遗漏了一些明显的东西,如果我遗漏了,有人能帮我吗


作为记录,我知道已经有几个主题了,但我现在只上了我在学校的第一节编程课,所有其他主题都有太多额外的内容,我无法理解。

您的数组声明为:

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样式数组。


它为您省去了所有这些问题,并提供了字符数组为您提供的所有功能。

您的数组声明为:

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样式数组。


它为您省去了所有这些问题,并提供了字符数组为您提供的所有功能。

当您访问
person1a[SIZE]
等时,您正在突破数组边界
数组索引是基于0的,因此最大索引是
SIZE-1
而不是
SIZE

当您访问
person1a[SIZE]
等时,您正在突破数组边界
inData >> person1a[SIZE]
数组索引是基于0的,因此最大索引是
SIZE-1
而不是
SIZE

inData >> person1a[SIZE]
假设
inData
是某种
std::istream
或类似类型,将单个字符流到数组的元素
SIZE
。由于这是数组的大小,并且有效索引在范围
[0,size-1]
内,因此它会写入数组之外的内容,从而导致堆栈损坏

如果要读取字符串,请读入数组本身:

inData >> person1a
当然,如果用户输入的字符太多,这也会导致损坏,因此请使用
std::string
来存储字符串,而不要混淆字符数组

此外,要将数据流分为多个内容,请连锁
>

inData >> person1a >> person1b >> ...;
您的代码使用逗号运算符,这意味着您实际上只将数据流传输到
person1a
,语句的其余部分无效

假设
inData
是某种
std::istream
或类似类型,将单个字符流到数组的元素
SIZE
。由于这是数组的大小,并且有效索引在范围
[0,size-1]
内,因此它会写入数组之外的内容,从而导致堆栈损坏

如果要读取字符串,请读入数组本身:

inData >> person1a
当然,如果用户输入的字符太多,这也会导致损坏,因此请使用
std::string
来存储字符串,而不要混淆字符数组

此外,要将数据流分为多个内容,请连锁
>

inData >> person1a >> person1b >> ...;
您的代码使用逗号运算符,这意味着您实际上只将数据流传输到
person1a
,语句的其余部分无效