Skip to content

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

@duyanning

Description

@duyanning
    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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions