0

我需要知道这个 StrBuff 结构是否应该像数组一样运行。我看了又看,老实说不能仅仅因为指针语法而说出来——它看起来像一个数组它可以工作,而作为一个数组它不能工作。

我看到在第二种方法中,使用了 malloc() ,所以我猜测 buf-str uChar 应该是一个数组。

编码:

typedef struct {
    unsigned char *str;
    unsigned int len;
} StrBuf;


static StrBuf *
strbuf_new ()
{
    StrBuf *buf;

    buf = (StrBuf *) calloc (sizeof (StrBuf), 1);
    buf->str = (unsigned char *) strdup ("");
    return buf;
}


static void
strbuf_append (StrBuf *buf, unsigned char *data, int len)
{
    int offset;

    if (len <= -1)
        len = strlen ((char *) data);
    offset = buf->len;
    buf->len += len;
    buf->str = (unsigned char *) realloc (buf->str, buf->len + 1);
    memcpy (buf->str + offset, data, len);
    buf->str[buf->len] = '\0';
}

所以,从这些方法来看,我猜对于任何 C/C++ 资深人士来说,这应该是小菜一碟。

编辑:

我的目标是将应用程序(在此处使用此代码)转换为 Java 端口,但我一直很困惑我应该如何去做。我已经在 J​​ava 中做了(大部分)同样的事情,只是这次使用 byte[] 数组,看看 unsigned chars 应该如何等同于 Java 中的字节。

4

1 回答 1

2

它不是一个数组。它是一种使用动态内存分配来保存值(可能是字符串)的结构。如果你使用一个数组来分配一些数据,那么数组大小是在编译时确定的。例如:

char buf[10];

使用像 StrBuf 这样的结构,您可以在提供给定长度的字符串 buf 时分配所需的内存:

buf->str = (unsigned char *) realloc (buf->str, buf->len + 1);
于 2011-06-13T00:26:47.497 回答