C ZooKeeper统计结构未更改

C ZooKeeper统计结构未更改,c,apache,struct,apache-zookeeper,C,Apache,Struct,Apache Zookeeper,您好,我正在使用ZooKeeper的C绑定,当我调用zoo_exists()或zoo_get()函数时,应该根据文档更新stat参数。但是,当我运行代码时: create("/mypath", "testnode"); //this creates a znode /mypath with data stored being "testnode". char* buffer= malloc(1); int buffer_len=1; struct Stat s; zoo_get(zh, "/

您好,我正在使用ZooKeeper的C绑定,当我调用zoo_exists()或zoo_get()函数时,应该根据文档更新stat参数。但是,当我运行代码时:

create("/mypath", "testnode"); 
//this creates a znode /mypath with data stored being "testnode".

char* buffer= malloc(1);
int buffer_len=1;
struct Stat s;
zoo_get(zh, "/mypath", 0, buffer, &buffer_len, &s);
文档说明:
\param buffer_len是缓冲区参数指向的缓冲区大小。它将在返回时设置为实际数据长度。如果数据为空,则长度为-1

\param stat如果不为NULL,将在返回时保存路径的stat值

我做错什么了吗?我的统计结构没有更改。我的缓冲区也没有。获取更新后的stat struct s后,我想使用s.datalength通过以下行获取存储在znode中的完整数据:

 char* newBuffer = malloc(s.datalength);
 buffer_len = s.datalength;
 zoo_get(zh, "/mypath",0, newBuffer, &buffer_len, NULL);

我不明白这个问题,但为什么要分配长度
1
byte的缓冲区?与使用简单变量相比,它有什么优势?当您读取结构时,
1
的缓冲区大小的相关性是什么?顺便说一句,我不是zoo管理员。我之所以选择buffer length为1,是因为调用zoo_get()后我会更新buffer length,因为它应该在返回时返回实际的数据长度(只要长度不是-1?),我会使用Stat结构的s.datalength元素来确认数据长度。然后,我将使用正确的缓冲区长度值调用zoo_get()。