【问题标题】:Understanding the StrBuff In C理解 C 中的 StrBuff
【发布时间】:2011-06-13 00:17:41
【问题描述】:

我需要知道这个 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 中的字节。

【问题讨论】:

  • 到底是什么问题?如何像数组一样?你想用它做什么?

标签: c arrays malloc stringbuffer


【解决方案1】:

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

char buf[10];

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

buf->str = (unsigned char *) realloc (buf->str, buf->len + 1);

【讨论】:

  • @Overbose 所以,如果我要在 Java 中复制它,我应该只创建一个 StringBuffer 吗?我一直在将使用该代码的应用程序转换为 Java 端口。我遇到了一些问题,这些问题真的让我怀疑我是否做错了。
  • 在java中你可以简单地使用String。
  • 而且,如果您想知道,我已经在使用 StrBuff,只是将其 Str 数据成员作为字节数组。我以为array = new byte[num];,和c中的malloc()一样。
  • 取决于您在那里存储的数据。 StrBuf 似乎应该保存字符串。如果是这样,那么在 java 中只需声明一个 new String();
  • 我认为它实际上是在读取文件并存储数据。在这种情况下,你会建议我使用一个字节吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多