1

クラスの課題に取り組んでいますが、修正できないエラーが表示され続けます。私のコードの一部です。

#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

などですが、このエラーを乗り越えることはできません。

ここで明らかな何かが欠けていますか? もしそうなら、誰かが私を助けることができますか?

記録のために、私はこれについてすでにいくつかのトピックがあることを知っていますが、私は今学校で最初のプログラミングクラスを取っているだけで、他のすべてのトピックには余分なものが詰め込まれているため、理解できません.

4

3 に答える 3

2

あなたの配列は次のように宣言されています:

char person1a[SIZE]; 

したがって、配列にアクセスする際の有効な添え字0SIZE-1

声明で:

inData >> person1a[SIZE], person1b[SIZE], person2a[SIZE], person2b[SIZE],       person3a[SIZE], person3b[SIZE], person4a[SIZE], person4b[SIZE]; 

各配列に割り当てられたメモリを超えて 1 つ書き込んでいます。

あなたはC++を使用しているので、Cstd::stringスタイルの配列ではなく使用する必要があります。
このような問題をすべて解決し、文字配列が提供するすべての機能を提供します。

于 2012-11-28T11:20:03.370 に答える
2

etcにアクセスすると、配列の境界に違反していますperson1a[SIZE]配列のインデックスは 0 から始まるため、最大のインデックスSIZE-1SIZE

于 2012-11-28T11:20:26.010 に答える
2
inData >> person1a[SIZE]

inDataそれがある種または類似していると仮定すると、それはstd::istream単一の文字をSIZE配列の要素にストリーミングします。それが配列のサイズであり、有効なインデックスが範囲内[0,SIZE-1]にあるため、配列を超えて書き込み、スタックの破損を引き起こします。

文字列を読み取る場合は、配列自体を読み取ります。

inData >> person1a

もちろん、これはユーザーがあまりにも多くの文字を入力した場合にも破損を引き起こすためstd::string、文字配列をいじるのではなく、文字列を格納するために使用してください。

また、複数のものにストリーミングするには、 chain >>:

inData >> person1a >> person1b >> ...;

コードではコンマ演算子を使用しています。つまり、実際には にストリーミングするだけperson1aで、ステートメントの残りの部分は効果がありません。

于 2012-11-28T11:20:32.267 に答える