2012-04-08 69 views
-2

我想將緩衝區保存到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

你對此有何看法?

   printf("KEY%d DATA:%.*s\n",count,msg_buff[count][0],1800); 

msg_buff[count][0]是數組的第一個字符。您需要通過msg_buff[count]來打印整個字符串。

此外,*修飾符被定義爲寬度未在格式字符串中指定,而是作爲參數前面的附加整數值參數,必須格式化爲。我會解釋這意味着你的第三個參數(1800)必須在你的第二個參數(msg_buff[count])之前。爲了簡單起見,請確保所有字符串都以NULL結尾,並且不要使用寬度修飾符。

要實際創建您的鍵數組,請不要在循環中逐個複製每個字符。改爲使用strncpy。確保在NULL終止符的緩衝區中有空間(分配1801字節而不是1800)。現在您的複製循環無論如何都會中斷,因爲您永遠不會增加cbuf_pos,因此每個字符都會寫入數組中的第一個位置。

+0

它什麼都沒有返回。如果我檢查數據後,像printf(「%c」,msg_buff [key_num] [cbuf_pos]);它顯示數據在變量中。但我怎麼得到它現在返回完整的字符串.. hmph – 2012-04-08 04:56:10

+0

通過'沒有返回',你的意思是你的程序絕對沒有輸出? – 2012-04-08 04:59:32

+0

在陣列前面移動1800也沒有任何好處,我可以通過數組的第二維的每個元素循環並獲取字符,但是我無法將它們作爲完整字符串返回。 – 2012-04-08 05:01:37

1

當你指定msg_buff時,你在哪裏遞增cbuf_pos?此外,在if(buf_pos % 1800 ==0)中,用'\ 0'終止msg_buff[key_num][cbuf_pos](檢查是否還有一個字符)。