0

在下面的程序中,我正在读取一个 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

任何形式的帮助将不胜感激。谢谢你。

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()还将附加一个空字符(由tinman评论)。dd要正确增加要读取的字符的大小和数量:

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