2012-08-09 223 views
0

在以下程序中,我正在读取6长度字符串dd并将其ascii代码存储在大小为3x2的整数数组ipcc中。问题在于,存储在ipc中的值是错误的,并且在我重新打印它们时会稍后改变它们。我很惊讶,这样一个简单的代码怎么会出现这样一个明显的问题。 (我使用的代码:: Blocks的10.05上Win7的X64)在C++中自行更改数组值

#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 

任何形式的帮助将是非常赞赏。谢谢。

回答

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

不数组从0开始,所以为什么我需要定义IPC [3] [2]? – xan99 2012-08-09 11:10:59

+2

'char dd [5];''和'cin.get(dd,6);'是否也存在问题? '\ 0'将自动存储在dd [5]。 – tinman 2012-08-09 11:11:56

+0

@ xan99数组的索引从0开始计数,但大小(您在此指定的大小)不是索引。 – Nobody 2012-08-09 11:12:18