-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++;
}
4

2 回答 2

1

cbuf_pos分配给 时,您在哪里增加msg_buff?此外,在if(buf_pos % 1800 ==0), 中msg_buff[key_num][cbuf_pos]以 '\0' 结束(检查是否还有一个字符)。

于 2012-04-08T04:55:18.330 回答
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。确保缓冲区中有空终止符的空间(分配 1801 个字节而不是 1800 个字节)。现在你的复制循环无论如何都被打破了,因为你永远不会递增cbuf_pos,所以每个字符都被写入数组中的第一个位置。

于 2012-04-08T04:51:32.147 回答