现在我正在努力计算cJSON
物体的大小。到目前为止,我已经这样做了:
cJSON *payload = cJSON_CreateObject();
...
size_t size_payload = sizeof(payload);
Run Code Online (Sandbox Code Playgroud)
显然,我初始化了有效负载对象,然后打印到终端以验证数据的完整性,一切正常。然而,打印sizeof
结果后,字节数始终为 4,但对于长字符串(如我的),它应该在 500 字节左右。
我在这里缺少处理cJSON
对象的东西吗?
希望你能帮忙,或者给我一个例子来说明如何获得整个尺寸的正确值。
sizeof()
是一个编译时常数。它在运行时没有数据的概念。
sizeof(payload)
是变量的字节大小payload
,它被声明为cJSON*
指针。因此它的字节大小始终相同 - sizeof(void*)
,在您的情况下为 4 个字节(因为您正在编译 32 位应用程序)。它的大小不是cJSON
它所指向的对象的大小。
即使如此,如果您尝试取消引用指针并sizeof()
在cJSON
对象本身上使用,即sizeof(*payload)
,它将是编译时cJSON
结构本身的字节大小,而不是对象在内部为其自身分配的任何数据的字节大小在运行时。cJSON
AFAICScJSON
不提供返回其所持有的 JSON 数据的字节大小的方法,因此您只需将 JSON 格式化为字符串变量,然后在运行时查询该字符串的大小,例如:
char *str = cJSON_Print(payload); // or cJSON_PrintUnformatted() or cJSON_PrintBuffered() ...
if (str) {
size_t len = strlen(str);
cJSON_free(str);
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1207 次 |
最近记录: |