在下面的程序中,我正在读取一个 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
,则只会读取 12345
。 cin.get()
还将附加一个空字符(如 tinman 所评论)。要更正增加 dd
的大小和要读取的字符数:
char buf[7];
cin.get(buf, 7);
关于c++ - 数组值在 C++ 中自行改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882036/