我想使用 xbuf_trunclen(( 和 xbuf_truncptr(( 函数来削减我的缓冲区,但这些函数似乎不起作用。
下面是一个通过字符指针运行的示例:
char *string = (char*)strdup("---Boundary");
string += 3;
printf("String is '%s'", string);
结果:字符串为"边界">
这是我想做的,但似乎不起作用:
xbuf_t buffer;
xbuf_init(&buffer);
xbuf_cat(&buffer, "---Boundary");
xbuf_trunclen(&buffer, 3);
printf("Buffer is '%s'", buffer.ptr);
结果:缓冲区为"---边界">
而我想:缓冲区是"边界">
和"xbuf_trunptr((":
...
char *ptr = (char*)strdup("Boundary");
xbuf_truncptr(&buffer, ptr);
...
结果:缓冲区为"---边界">
而我想:缓冲区是"边界">
这是我的使用错误还是 2 个函数的操作问题? 目标是操作缓冲区的开头。
在你的代码中,你复制了xbuffer
的缓冲区,所以(ptr
!=buffer.ptr
(:
char *ptr = (char*)strdup("Boundary");
xbuf_truncptr(&buffer, ptr);
这样做不起作用:ptr
必须属于 [buffer.ptr
,buffer.ptr + buffer.len
] 内存范围。这也行得通:ptr[3] = 0;
而且,如果您只想使用 xbuf_trunclen(( 剪切字符串,执行以下操作会更快:
buffer.ptr[3] = 0;
希望这有帮助。
注意:在反省中,看到这两个功能让我想知道为什么首先创建它们。我想这是针对Java和C# API和开发人员的(因为这两种语言都不使用类似C的"字符串"并将它们封装在隐藏结构中(。