0

次のプログラムでは、6つの長さの文字列ddを読み取り、そのASCIIコードをサイズ3x2の整数配列ipcに格納しています。問題は、ipcに格納されている値が間違っており、後で再印刷したときに値が変更されることです。このような単純なコードで、どうしてこのような明らかな問題が発生するのか、私は驚いています。(私はWin7x64でCode:: Blocks 10.05を使用しています)

#include<iostream>

using namespace std;

int main()
{ char dd[5];
  int ipc[2][1];
  cin.get(dd,6);
  for(int i=0;i<3;i++)
  { for(int j=0;j<2;j++)
    { ipc[i][j]=int(dd[j+2*i]);
      cout<<ipc[i][j]<<endl;
    }
  }
  cout<<"------"<<endl;
  for(int i=0;i<3;i++)
  { for(int j=0;j<2;j++)
    { cout<<ipc[i][j]<<endl; }
  }
}

指定された入力が123456の場合、出力は次のようになります。

49
50
51
52
53
2
------
49
51
51
53
53
2

どんな種類の助けも大歓迎です。ありがとうございました。

4

1 に答える 1

12

配列宣言が正しくなく、コードが配列の範囲外になり、未定義の動作が発生します。宣言は次のように変更する必要があります。

int ipc[2][1]; 

に:

int ipc[3][2];

さらに、文字cin.get()を読み取るので、次のようになります。count - 1

cin.get(dd, 6);

5文字のみを読み取り、。は読み取りません6。ユーザーが入力した場合123456のみ12345が読み取られます。またcin.get()、null文字を追加します(tinmanによるコメント付き)。修正するには、dd読み取る文字のサイズと数を増やします。

char buf[7];
cin.get(buf, 7);
于 2012-08-09T11:08:37.257 に答える