数组值在C ++中自行更改

时间:2012-08-09 11:06:38

标签: c++ arrays

在下面的程序中,我正在读取一个6长度的字符串dd并将其ascii代码存储在大小为3x2的整数数组ipc中。问题是存储在ipc中的值是错误的,并且在我重新打印它们之后它们会自行更改。我很惊讶这样一个简单的代码怎么会出现这么明显的问题。 (我在Win7 x64上使用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

非常感谢任何形式的帮助。谢谢。

1 个答案:

答案 0 :(得分:12)

数组声明不正确,代码超出了数组范围,导致未定义的行为。声明应改为:

int ipc[2][1]; 

为:

int ipc[3][2];

此外,cin.get()会读取count - 1个字符,因此:

cin.get(dd, 6);

只会读取5个字符,而不是6。如果用户输入123456,则只会读取12345cin.get()也会附加一个空字符(由tinman评论)。要纠正增加dd的大小和要读取的字符数:

char buf[7];
cin.get(buf, 7);