G-WAN C function xbuf_trunclen() and xbuf_truncptr()



我想使用 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.ptrbuffer.ptr + buffer.len] 内存范围。这也行得通:ptr[3] = 0;

而且,如果您只想使用 xbuf_trunclen(( 剪切字符串,执行以下操作会更快:

buffer.ptr[3] = 0;

希望这有帮助。

注意:在反省中,看到这两个功能让我想知道为什么首先创建它们。我想这是针对Java和C# API和开发人员的(因为这两种语言都不使用类似C的"字符串"并将它们封装在隐藏结构中(。

相关内容

  • 没有找到相关文章

最新更新