2011-11-19 61 views
0

我有一個字符指針,char *buf; 我有一個整數數組,int console_buffer[256]; 我需要將console_buffer內容複製到字符buf。 我該怎麼做? bufconsole_buffer是不同結構的一部分。如何將整數數組內容複製到字符指針?

+5

這個問題是病態的。你想如何在int和char之間進行轉換? –

+0

我會告訴你爲什麼我需要這個。我正在嘗試執行讀取系統調用。 console_buffer被聲明爲整型數組,因爲遇到EOF時它返回-1,所以我知道我必須在這裏停下來。實際上console_buffer將包含字符。最後,在讀取console_biffer後,我需要將它複製到具有char * buf成員的過程控制塊結構中。 – Maxwell

+0

你可以用一個簡單的循環來做到這一點。你試過什麼了? –

回答

1

通過您的評論去,

buf = malloc(256); // 257 if console_buffer may be full without EOF 
/* if you want to allocate just as much space as needed, locate the EOF in console_buffer first */ 
for(int i = 0; i < 256 && console_buffer[i] != -1; ++i){ 
    buf[i] = (char)console_buffer[i]; 
} 
+0

謝謝。我的問題是,因爲我在console_buffer中存儲字符,將存儲爲ascii值,將(char)console_buffer [i]將它們轉換回字符?還是我需要以不同的方式處理這個問題? – Maxwell

+0

是的,鑄造到'char'完全是你想要的,因爲你存儲在console_buffer中的是'char'的範圍。但是,如果'char'被簽名,可能會出現問題。 'getc' family將unsigned char轉換爲int,這些可能超出簽名'char'的範圍,那麼轉換不能保證(但它幾乎肯定是正確的)。 –

+0

謝謝丹尼爾,它工作。 – Maxwell

0

如果您已經分配的內存爲buf,如果每個整數是0到9之間,你可以這樣做:

for(int i = 0; i < 256; i++) 
{ 
    buf[i] = '0' + console_buffer[i]; /* convert 1 to '1', etc. */ 
} 

如果整數是大於9,你可以使用sprintf功能。


讀你的新評論,或許你也可以從控制檯緩衝區直接讀取到字符數組,直到你有-1(用整數比較檢查,或通過strcmp,或通過比較2最後達到你的目的字符到01)。

+0

閱讀對Q.的評論 –

+0

以下代碼是否可用?對於(i = 0; i <256; i ++){ pcb-> buf =(char *)console_buffer(i); } 對不起,如果我聽起來很愚蠢,我剛開始使用指針,所以還不舒服。 – Maxwell

+0

@Igor Oks:我不明白。在我的console_buffer整型數組中,字符將被存儲爲'C','I'...(我猜ascii值將被存儲在我的對嗎?),並且一旦全部被讀取,-1整數將被存儲在結束。 – Maxwell

0

我認爲這是一個更好的辦法值轉換爲char小號

int i = 0; 
while (i <= 256) { 
    buf[i] = (char) console_buffer[i]; 
    i++; 
} 
相關問題