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

Array values changing by themselves in C++

本文关键字:C++ 数组      更新时间:2023-10-16

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

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

数组

声明不正确,代码在数组上越界,导致未定义的行为。声明应从:

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);