使用 json c++ 的输出在字段中获取奇怪的字符
Getting strange characters in fields with output from json c++
我正在使用从 .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)
我只粘贴了函数中的相关行。如果需要更多说明,我很乐意提供。
我明白了。我只需要更改 .asCString();到 asString().c_str();
我确信还有更多 eloquent 方法可以做到这一点,但正如我所说,我是新手。
您应该将结果保存在 std::string
中,然后对该字符串调用 c_str()
以获得 C 字符串。如果您链接这些调用并立即保存指针或仅执行 asCString()
保存 C 字符串指向的内存的字符串对象将被清除,您将在代码中调用未定义的行为,这不是您想要的.
I.E
std::string runtime = result.get("Runtime", "NULL").asString();
runtimeInput->value(runtime.c_str());
我正在使用从 .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)
我只粘贴了函数中的相关行。如果需要更多说明,我很乐意提供。
我明白了。我只需要更改 .asCString();到 asString().c_str();
我确信还有更多 eloquent 方法可以做到这一点,但正如我所说,我是新手。
您应该将结果保存在 std::string
中,然后对该字符串调用 c_str()
以获得 C 字符串。如果您链接这些调用并立即保存指针或仅执行 asCString()
保存 C 字符串指向的内存的字符串对象将被清除,您将在代码中调用未定义的行为,这不是您想要的.
I.E
std::string runtime = result.get("Runtime", "NULL").asString();
runtimeInput->value(runtime.c_str());