tbox
tbox copied to clipboard
tb_buffer_memncpyp会错误地改变目标缓冲区的大小
tb_buffer_t b;
tb_buffer_init(&b);
tb_buffer_memncpy(&b, (tb_byte_t const*)"abcde", 6); // data[0-5]
tb_trace_i("%s", tb_buffer_data(&b));
printf("size: %ld\n", tb_buffer_size(&b));
printf("maxn: %ld\n", tb_buffer_maxn(&b));
printf("data[%ld]=%d\n", tb_buffer_size(&b), *((char*)tb_buffer_data(&b)+tb_buffer_size(&b)));
printf("data[%ld]=%d\n", tb_buffer_size(&b)+1, *((char*)tb_buffer_data(&b)+tb_buffer_size(&b)+1));
printf("data[%ld]=%d\n", tb_buffer_size(&b)+2, *((char*)tb_buffer_data(&b)+tb_buffer_size(&b)+2));
tb_buffer_memncpyp(&b, 1, "XY", 2); // 用XY覆盖目标缓冲区中两个字节,目标缓冲区长度不该有变化
tb_trace_i("%s", tb_buffer_data(&b));
printf("size: %ld\n", tb_buffer_size(&b));
printf("maxn: %ld\n", tb_buffer_maxn(&b));
tb_buffer_exit(&b);
上述代码会产生如下输出:
abcde
size: 6
maxn: 32
data[6]=0
data[7]=0
data[8]=-24
aXYde
size: 3 // 此处存在问题,size应该保持6不变。只是用XY覆盖了bc而已。
maxn: 32