2012-04-08 68 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](检查是否还有一个字符)。