使用json c ++的输出在字段中获取奇怪的字符
Posted
技术标签:
【中文标题】使用json c ++的输出在字段中获取奇怪的字符【英文标题】:Getting strange characters in fields with output from json c++ 【发布时间】:2017-09-26 07:39:34 【问题描述】:我正在使用从 .get(movie) 函数接收到的 json 值来获取 json 电影对象中每个键的值。我正在尝试将其输出到 fltk GUI 中的字段中,该字段需要为 const char * 类型。但是,我得到的是奇怪的字符而不是我的价值观。这里有明显的问题吗?
Json::Value result = m.get(movie);
std::cout << result << endl;
const char *released = result.get("Released", "NULL").asCString();
releasedInput->value(released);
const char *rated = result.get("Rated", "NULL").asCString();
ratedInput->value(rated);
Json::Value actors = result.operator[]("Actors");
const char *plot = result.get("Plot", "NULL").asCString();
plotMLIn->value(plot);
const char *runtime = result.get("Runtime", "NULL").asCString();
runtimeInput->value(runtime);
Json::Value genre = result.operator[]("Genre");
const char *filename = result.get("Filename", "NULL").asCString();
filenameInput->value(filename);
const char *title = result.get("Title", "NULL").asCString();
titleInput->value(title)
我只在我的函数中粘贴了相关行。如果需要更多说明,我很乐意提供。
【问题讨论】:
你试过调试你的代码吗?试图在调试器中逐行执行代码,同时监视变量及其值?哪些字符串是错误的? 如何他们错了?你期待什么文本,你实际上得到了什么? 对于 #1,当我使用 std::string 时,我收到错误消息,它们必须是 const char * 类型,所以我更改了它。对于 #2,这是因为我只是在学习这一点,而且从文档来看,这似乎是要做的事情。 哦,你为什么要显式调用operator[]
作为一个函数?为什么不呢? result["Actors"]
?
我会改变这一点 就像我说的,我是新手,所以我一定误解了 Json::Value 的文档。我正在那里接收一个数组。
【参考方案1】:
您应该将结果保存在std::string
中,然后对该字符串调用c_str()
以获取C 字符串。如果您链接这些调用并立即保存指针,或者只执行asCString()
,则保存 C 字符串指向的内存的字符串对象将被清除,您将在代码中调用未定义的行为,这不是您想要的。
I.E
std::string runtime = result.get("Runtime", "NULL").asString();
runtimeInput->value(runtime.c_str());
【讨论】:
【参考方案2】:我明白了。我只需要更改 .asCString();到 asString().c_str();
我确信有一种更雄辩的方法可以做到这一点,但正如我所说,我是新手。
【讨论】:
这只会看起来有效,它仍然是未定义的行为。以上是关于使用json c ++的输出在字段中获取奇怪的字符的主要内容,如果未能解决你的问题,请参考以下文章
如何从在 C 中存储 shell 脚本输出的指针获取多个字符串?