多维数组和传输缓冲区

我试图将缓冲区保存为1800个字符的数组段。 当我尝试打印每个新缓冲区时,我能够传输缓冲区。 我输出为null。 我究竟做错了什么?


编辑 – 我将循环更改为此以将空终止添加到第二维的末尾。 现在输出告诉我它是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++; } 

在分配给cbuf_pos ,你在哪里递增msg_buff ? 此外,在if(buf_pos % 1800 ==0) ,使用’\ 0’终止msg_buff[key_num][cbuf_pos] (检查还剩下一个字符)。

你有什么期望呢?

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

msg_buff[count][0]是数组的第一个字符。 你需要传递msg_buff[count]来打印整个字符串。

此外,*修饰符定义为格式字符串中未指定宽度,但作为必须格式化的参数前面的附加整数值参数 。 我会解释这意味着你的第三个参数( 1800 )必须在你的第二个参数( msg_buff[count] )之前。 为简单起见,请确保所有字符串都以NULL结尾,并且不使用width修饰符。

要实际创建键数组,请不要在循环中逐个复制每个字符。 请改用strncpy 。 确保缓冲区中有空间用于NULL终止符(分配1801字节而不是1800)。 现在你的复制循环无论如何都会被破坏,因为你永远不会增加cbuf_pos ,所以每个字符都被写入数组的第一个位置。