gpt4 book ai didi

c - 获取 avro 字符串时出错

转载 作者:行者123 更新时间:2023-11-30 16:43:14 25 4
gpt4 key购买 nike

我正在尝试使用 avro-c 做一个简单的字符串 setter getter 程序。

我的代码是:

avro_value_t frame_value;
avro_schema_t frame_schema = avro_schema_string();
avro_value_iface_t *frame_iface = avro_generic_class_from_schema(frame_schema);
avro_generic_value_new(frame_iface, &frame_value);

char *name;
int size;

avro_value_set_string(&frame_value,"hello");
avro_value_get_string(&frame_value,name,&size);
printf("\nname is %s",name);
printf("\nsize is %d",size);

但它输出一个空字符串,尽管大小是正确的,即 6(包括空字符)。我做错了什么?

最佳答案

必须是以下内容,注意&name而不是name:

avro_value_get_string(&frame_value, &name, &size);

因为该函数需要一个指向常量字符的双指针。有必要将指针设置为由 setter 设置的内部字符数组。

参见here in the API documentation :

int avro_value_get_string(const avro_value_t *value,
const char **dest, size_t *size);

还要使您的 name 指针指向常量字符,并且您的 sizesize_t 类型而不是 int:

const char *name;
size_t size;
<小时/>

进一步使用avro_generic_value_new之后,您必须在使用后通过以下方式释放空间:

avro_generic_value_free(&frame_value);

您还必须使用:

avro_value_iface_decref(frame_iface);
avro_schema_decref(frame_schema);

由于API会进行引用计数,因此需要在使用后释放空间。

<小时/>

此外,我建议始终检查函数的返回值,它们是 int 或指针,其含义由 API documentation 解释。 :

Most functions in the Avro C library return a single int status code. Following the POSIX errno.h convention, a status code of 0 indicates success. Non-zero codes indiciate an error condition. Some functions return a pointer value instead of an int status code; for these functions, a NULL pointer indicates an error.

You can retrieve a string description of the most recent error using the avro_strerror function:

avro_schema_t  schema = avro_schema_string();
if (schema == NULL) {
fprintf(stderr, "Error was %s\n", avro_strerror());
}

关于c - 获取 avro 字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45438894/

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