gpt4 book ai didi

c - 理解 C 语言中的 StrBuff

转载 作者:行者123 更新时间:2023-11-30 14:28:18 24 4
gpt4 key购买 nike

我需要知道这个 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[] 数组,看看无符号字符应该与 Java 中的字节等效。

最佳答案

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

char buf[10];

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

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

关于c - 理解 C 语言中的 StrBuff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com