c++ - 数组值在 C++ 中自行改变

标签 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

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

最佳答案

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

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

关于c++ - 数组值在 C++ 中自行改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882036/

相关文章:

c++ - 基于范围的for循环的奇怪问题

c - 指针作为一个数组的索引 - C

java - 尝试使用构造函数传递数组值

php - 如何遍历数组以插入数据库

c++ - 如何使我的自定义类型与 "range-based for loops"一起使用?

c++ - 从长远来看,最好的方法是什么 : C, Objective C 或 C++?

c++ - 你不能在 C++ 中比较 if(mychar1 == 'ä' || mychar2 == 'Ä') 吗?

javascript - 生成器未定义

C++ - 在 Windows 上导入明确专用的模板

c++ - 如何防止 C API 注册表中的 Lua 回调被垃圾收集?