我正在尝试将缓冲区保存为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++;
}
答案 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 > 0
为零时只测试buf_pos % 1800
,避免在1800年中测试明显的1799次。
如果没有诊断打印件,我会在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
的事实是麻烦。