2017-09-26 5 views
0

J'utilise la valeur json que je reçois de ma fonction .get (film) pour obtenir les valeurs de chacune des clés de mon objet film json. J'essaye de le sortir dans des champs dans une interface graphique de fltk, qui doit être le type const de char. Cependant, je reçois des caractères étranges au lieu de mes valeurs. Y a-t-il un problème évident ici?Obtention de caractères étranges dans les champs avec la sortie de 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) 

J'ai collé uniquement les lignes pertinentes dans ma fonction. Si plus de clarification est nécessaire, je suis heureux de le fournir.

+0

Avez-vous essayé le débogage de votre code? Essayé de parcourir le code, ligne par ligne, dans un débogueur, tout en surveillant les variables et leurs valeurs? Quelles chaînes ont tort? * Comment * ont-ils tort? Quels textes attendiez-vous et qu'obtenez-vous réellement? –

+0

Pour # 1, quand j'utilisais std :: string, j'ai reçu le message d'erreur qu'ils devaient être de type const char * donc je l'ai changé. Pour le n ° 2, c'est parce que je suis en train d'apprendre cela et, à partir de la documentation, il semblait que c'était la chose à faire. – Kendra

+0

Oh et pourquoi appelez-vous explicitement 'operator []' en tant que fonction? Pourquoi pas, par exemple 'result [" Acteurs "]'? –

Répondre

1

Vous devez enregistrer le résultat dans un std::string puis appeler le c_str() sur cette chaîne pour obtenir un C-string. Si vous enchaînez ces appels et enregistrez le pointeur instantanément ou que vous ne faites que asCString() l'objet chaîne contenant la mémoire vers laquelle le C-string est pointé aura été effacé et vous invoquerez un comportement non défini dans votre code, ce qui n'est pas ce que vous voulez.

i.e.

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

Je l'ai eu. J'ai juste besoin de changer .asCString(); à asString(). c_str();

Je suis sûr qu'il y a une façon plus éloquente de le faire mais, comme je l'ai dit, je suis un débutant.

+0

Cela ne semble fonctionner, c'est toujours un comportement indéfini. –