tbox icon indicating copy to clipboard operation
tbox copied to clipboard

tb_buffer_memncpyp会错误地改变目标缓冲区的大小

Open duyanning opened this issue 1 year ago • 4 comments

    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

duyanning avatar Mar 02 '23 15:03 duyanning