【问题标题】:G-WAN C function xbuf_trunclen() and xbuf_truncptr()G-WAN C 函数 xbuf_trunclen() 和 xbuf_truncptr()
【发布时间】:2018-06-19 20:37:40
【问题描述】:

我想使用 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);
...

结果:缓冲区是'---边界'

虽然我想:缓冲区是“边界”

这是我的使用错误还是两个功能的操作问题? 目标是操纵缓冲区的开头。

【问题讨论】:

    标签: c truncate g-wan


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多