首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算cJSON对象的字节大小

计算cJSON对象的字节大小
EN

Stack Overflow用户
提问于 2021-02-18 10:15:04
回答 1查看 163关注 0票数 1

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

代码语言:javascript
复制
cJSON *payload = cJSON_CreateObject();
...
size_t size_payload = sizeof(payload);

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

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

希望你能帮助我,或者给我一个例子,告诉我如何获得合适的整个尺寸的值。

EN

回答 1

Stack Overflow用户

发布于 2021-02-18 10:37:59

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

sizeof(payload)payload变量的字节大小,它被声明为cJSON*指针。因此它的字节大小总是相同的- sizeof(void*),在你的例子中是4个字节(因为你正在编译你的应用程序的32位)。它的大小不是它所指向的cJSON对象的大小。

即使这样,如果你试图取消引用指针并在cJSON对象本身上使用sizeof(),也就是sizeof(*payload),它将是sizeof(*payload)cJSON结构本身的字节大小,而不是cJSON对象在运行时内部为它自己分配的任何数据的字节大小。

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

代码语言:javascript
复制
char *str = cJSON_Print(payload); // or cJSON_PrintUnformatted() or cJSON_PrintBuffered() ...
if (str) {
    size_t len = strlen(str);
    cJSON_free(str);
    ...
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66252639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档