2017-09-26 28 views
0

jsonムービーオブジェクト内の各キーの値を取得するために、私の.get(movie)関数から受け取ったjson値を使用しています。私はそれをconst char *型にする必要があるfltk GUIのフィールドに出力しようとしています。しかし、私の価値の代わりに、私は奇妙な文字を取得しています。ここに明らかな問題はありますか?jsonからの出力を持つフィールドに奇妙な文字を取得するC++

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) 

私は自分の関数内に関連する行だけを貼り付けました。より明確化が必要な場合は、私はそれを提供して喜んでいる。

+0

はあなたのコードをデバッグしようとしたことがありますか?変数とその値を監視しながら、デバッガで1行ずつコードをステップ実行しようとしましたか?どのような文字列が間違っている? *どのように間違っていますか?あなたはどんなテキストを期待しましたか、実際に何を得ていますか? –

+0

#1の場合、std :: stringを使用していたときに、const char *と入力しなければならないというエラーメッセージが表示されました。 #2のために、これは私がちょうどこれを学んでいるので、ドキュメントから見ると、そうするように見えました。 – Kendra

+0

ああ、なぜoperator []を関数として明示的に呼び出すのですか?どうしてですか? 'result [" Actors "]'? –

答えて

1

結果をstd::stringに保存し、その文字列にc_str()を呼び出してC文字列を取得する必要があります。これらの呼び出しを連鎖して即座にポインタを保存するか、またはasCString()のC文字列が指し示すメモリを保持している文字列オブジェクトがクリアされ、コードで未定義の動作が呼び出されます。

すなわち

std::string runtime = result.get("Runtime", "NULL").asString(); 
runtimeInput->value(runtime.c_str()); 
0

私はそれを得ました。私はちょうど.asCString()を変更する必要があります。 asString()。c_str();

私は言ったように、もっと雄弁な方法があると確信していますが、私は初心者です。

+0

これは動作しているように見えますが、それでも未定義の動作です。 –

関連する問題