2012-04-08 65 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就是麻烦。