计算 cJSON 对象的字节大小

问题描述

现在我正在努力计算 cJSON 对象的大小。到目前为止,我已经这样做了:

cJSON *payload = cJSON_CreateObject();
...
size_t size_payload = sizeof(payload);

显然,我初始化了有效载荷对象,然后打印到终端以验证数据的完整性,并且没问题。但是,在打印 sizeof 结果后,字节数始终为 4,但对于长字符串(如我的),它应该在 500 字节左右。

我在处理 cJSON 对象时遗漏了什么吗?

希望你能帮忙,或者给我一个例子来说明如何获得整个尺寸的正确值。

解决方法

sizeof() 是编译时常量。它没有运行时数据的概念。

sizeof(payload)payload 变量的字节大小,它被声明为 cJSON* 指针。因此它的字节大小始终相同 - sizeof(void*),在您的情况下为 4 个字节(因为您正在为 32 位编译应用程序)。它的大小不是它指向的 cJSON 对象的大小。

即便如此,如果您尝试取消引用指针并在 sizeof() 对象本身上使用 cJSON,即 sizeof(*payload),它将是 {{1} 的字节大小} 结构本身在编译时,而不是cJSON对象在运行时内部为自己分配的任何数据的字节大小。

AFAICS,cJSON 不提供返回它所持有的 JSON 数据的字节大小的方法,因此您只需要将 JSON 格式化为字符串变量,然后查询该字符串的大小在运行时,例如:

cJSON