2012-04-08 79 views
-3

可能重複:
multidimensional arrays and transferring buffers傳輸緩衝器與多維數組

我試圖保存的緩衝到的1800個字符陣列段。當我能夠傳輸緩衝區,但當我嘗試打印每個新的緩衝區。輸出爲空。我究竟做錯了什麼?

我改變了循環,以便在第二維的末尾添加空終止符。現在輸出告訴我它是空的。但printf("%c")表示數據已傳輸。

while(buf_pos < msg_size+1){ 
    if(buf_pos % 1800 == 0){ 
     msg_buff[key_num][cbuf_pos]='\0'; 
     key_num++; 
     cbuf_pos=0; 
     msg_buff[key_num][cbuf_pos]=buf[buf_pos]; 
    }else 
     msg_buff[key_num][cbuf_pos]=buf[buf_pos]; 

    printf("%c",msg_buff[key_num][cbuf_pos]); 
    cbuf_pos++; 
    buf_pos++; 
} 
+0

現在我走了 – 2012-04-08 05:41:59

回答

0

嘗試按照DRY(不要重複自己)原則:

key_num = 0; 
cbuf_pos = 0; 
for (buf_pos = 0; buf_pos < msg_size+1; buf_pos++) 
{ 
    if (buf_pos % 1800 == 0 && buf_pos > 0) 
    { 
     msg_buff[key_num][cbuf_pos] = '\0'; 
     key_num++; 
     cbuf_pos = 0; 
    } 
    msg_buff[key_num][cbuf_pos] = buf[buf_pos]; 
    printf("%c", msg_buff[key_num][cbuf_pos]); 
    cbuf_pos++; 
} 

需要注意的是修改後的代碼避免遞增的第一個字符(但只測試buf_pos > 0buf_pos % 1800爲零,避免測試明顯的1799倍出的1800

沒有診斷打印,我的if後寫一行,而不是兩個或三個:

msg_buff[key_num][cbuf_pos++] = buf[buf_pos]; 

你可以提高你的打印測試,也通過使用:

printf("m[%d][%d] = %c\n", key_num, cbuf_pos, msg_buf[key_num][cbuf_pos]); 

這可能突出的麻煩(雖然我會向您授予它很快變得太詳細)。

這並不能真正解釋您的問題,除非事實上您在第一次通過循環時跳到key_num == 1就是麻煩。