2012-04-08 22 views
-3

でバッファを転送可能な重複:
multidimensional arrays and transferring buffersは多次元配列

私は1800文字の配列セグメントにバッファを保存しようとしています。これまでバッファを転送することができましたが、新しいバッファをそれぞれ印刷しようとしました。私は出力のためにnullを取得します。私は間違って何をしているのですか?

ループをこれに変更して、第2次元の終わりにヌル終端を追加しました。今すぐ出力はそれがnullであることを教えてください。しかし、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

ここから –

答えて

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 % 1800がゼロの場合のみbuf_pos > 0をテストし、回避することを

012:診断の印刷がなければ1800

のうち、明らかに1799回のテストを、私は1つのラインの代わりに、if後2または3を記述します。

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にスキップすることが問題でない限り、これは実際に問題を説明しません。