-3

可能重复:
多维数组和传输缓冲区

我正在尝试将缓冲区保存到 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++;
}
4

1 回答 1

0

尽量遵循 DRY(Don't Repeat Yourself)原则:

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时进行测试,避免在 1800 次中测试明显​​的 1799 次。buf_pos % 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这并不能真正解释您的问题,除非您在第一次通过循环时跳到的事实是麻烦。

于 2012-04-08T06:11:36.333 回答