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
,语句的其余部分无效