rapidjson中string使⽤的⼀点⼩坑
\u00000\u0004T_\u0000\u0000E html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">
使⽤rapidjson时出现以上问题,1.不是完整的内容,2.多次转义\c++中string的用法
bid.AddMember("adm", rapidjson::StringRef(html_snippet.c_str(),html_snippet.size()), allocator);
stringRef(html_snippet.c_str())⼀开始以为可能可能是字符串结束标志问题,这种⽅式会调动C的strlen去查\0判断字符串结束,⽽指定字符串长度的size后仍然会有\u00000的乱码出现.
使⽤另⼀种⽅式,未出现此种问题:
Value str_val;
str_val.SetString(html_snippet.c_str(),html_snippet.length(),allocator);
bid.AddMember("adm", str_val, allocator);
等价的⽅式:SringRef(html_snippet.c_str(),Value().SetString(html_snippet.c_str(),allocator).Move(),al
locator)
回去仔细查看⼿册对⽐源码,这两种⽅式的差异是StringRef是引⽤转移,也就是把指针指向了真正内容所在的内存区域。⽽第⼆种⽅式是值copy的⽅式,会分配内存把字符串复制⼀份副本。所以问题的根源是html_snippet 是临时局部变量,在document对象序列成json string是html_snippet局部变量已被析构,故转移的⽅式指向的内存区域是未知的,导致了\00000的出现。
2.多次转义\是嵌套json 对象导致。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论