Probleme mit String-Variable
-
Ich arbeite momentan an einem GTK-basierten Projekt, bei dem ich folgendes Problem hab:
Ich habe ein If-Konstrukt:
if (!strcmp (element_name, pub_pattern)) { pub_res = attribute_values [0]; }
attribute_values ist vom typ (const gchar *). Dessen Inhalt soll in der globalen Variablen pub_res gespeichert werden, die ist ebenfalls (const gchar *). Das wird dann auch entsprechend gemacht.
Nun möchte ich aber aus einer Klasse raus, den Wert zurückgeben:
const gchar *_nxp_prefs::getResult () { return pub_res; }
Wenn ich den jetzt aber ausgebe, bekomme ich nur einen leeren String:
prefs.loadFromXML ("DebugWindowOnStartup", CONFIG_FILE); g_print (">> %s\n", prefs.getResult ()); // Ergib ">> "
Was läuft hier schief?
-
Sean Mertiens schrieb:
if (!strcmp (element_name, pub_pattern)) { pub_res = attribute_values [0]; }
pub_res ist const char* und attribute_values ebenfalls?
dann funktioniert der code aber nicht.
entweder du schaust, dass du pub_res zu einem char* machst und dann attribute_values per strcpy reinkopierst, oder, fallst es compile-time konstanten sind das [0] weglässt (das in jedem fall)oder du steigst von char* auf die C++ string Klasse um.
-
da mit char* und strcpy hab ich ebenfalls auprobiert, hier war dann der wert von pub_res "<nil>". Was das mit der [0] angeht, habe ich eben vergessen zu erwähnen, dass attribute_values ein array ist
.
das mti der strign klasse ist net so einfach, weil attribute_values nämlich von GTK definiert ist, es handelt sich nämlich um eine Callback funktion.
-
naja, bei char musst du aber auf den speicher achten:
if (!strcmp (element_name, pub_pattern)) { /* uU: delete [] pub_res */ pup_res = new char[strlen(attribute_values[0])+1]; strcpy(pub_res, attribute_values[0]); } //delete[] nicht vergessen
dann hast du den string garantiert.
-
Danke! Klappt einwandfrei!