G-WAN C函数xbuf_trunclen()和xbuf_truncptr()

时间:2018-06-19 20:37:40

标签: c truncate g-wan

我想使用xbuf_trunclen()和xbuf_truncptr()函数来减少缓冲区,但是这些函数似乎不起作用。

这是一个通过char指针运行的示例:

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个功能的操作问题? 目的是操纵缓冲区的开始。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您复制了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的“字符串”,而是将它们封装在隐藏的结构中)。