2012-06-21 48 views
1

我有沒有在C++明白一個問題: 我得到了一個無符號字符*從一個方法調用的結果。如果我迭代char *來顯示數據,一切都很好,但是當我打印數據時,顯示的值不同。DATAS很好的展示,而迭代通過字節顯示字節而不是其他

這裏是我的代碼示例:

unsigned char returning[32]; 
for(int i=0;i<32;i++){ 
    returning[i] = result[i]; 
    std::cout << returning[i];//return the good values 
} 
std::cout << "\n"; 
std::cout << returning << "\n"; 
//the first one are the good values, and then there are wrong 

有人可以解釋我的這種奇怪的行爲?

+0

這是一個有點不清楚。你得到什麼輸出?數組是否終止? –

回答

1

TL; DR:

unsigned char returning[33]; 
returning[32] = '\0'; 

固定。

說明:

第一個循環將在「迴歸」打印每一個值。第二段代碼只會返回值,直到它達到零值。然後停止,因爲char數組中的零被解釋爲行尾字符。

或者,如果沒有零「迴歸」的任何地方,代碼的第二件要繼續寫隨機值,直到它打了一個零。

+0

謝謝,它的作品和解釋非常明確! – darkheir

1

首先在returning數組,你只是分配,直到這是不對的31日指數值。該字段的最後一個字節應爲空終止\0

std::cout << returning[i]該語句將讀取該特定的ASCII值,它會打印出相應的字符。

std::cout << returning但這句話會繼續讀取字節直到它到達\0。在你的情況下returning數組不是NULL終止。所以在這個緩衝區溢出會發生,它會打印第一個32字節的適當字符,然後它會開始打印一些其他字符(也可能無法正常讀取)。如果\0永遠不會進入其他字節,那麼它肯定會試圖超越該段,那時應用程序將崩潰。

相關問題