2012-08-09 57 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