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!


Anmelden zum Antworten