Problem mit Pointer aus string



  • Hallo,
    mein Problem ist folgendes:

    Ich hab eine Funktion welche mit einem string rechnet.
    Diesen String will ich dann auch dem Rest des Programms zugänglich machen.
    Ich hab mir dass so vorgestellt:

    //....
    string *point_to_data;
    
    //....
    int main (){
    //...
    Funktion();
    //Dann den String ausgeben
    cout<<*point_to_data;
    //...
    }
    
    void Funktion(){
    string* data=new string;
    //...
    point_to_data=data;
    //...
    }
    

    Theoretisch müsste dass doch funktionieren!
    Wenn ich den string *point_to_data in der Funktion ausgeben lasse ist er noch komplett, aber wenn ich ihn in meiner main Funktion ausgeben lasse ist nur noch ein Teil vom Ende vorhanden 😕 Wenn es hilft die Frage zu beantworten: In dem string ist eine Internetseite also mit Lehrzeichen etc.

    Ich hoffe jemand weiß woran das liegt, wär toll.



  • shorty0802 schrieb:

    Hallo,
    mein Problem ist folgendes:

    Ich hab eine Funktion welche mit einem string rechnet.
    Diesen String will ich dann auch dem Rest des Programms zugänglich machen.
    Ich hab mir dass so vorgestellt:

    //....
    string *point_to_data;
    
    //....
    int main (){
    //...
    Funktion();
    //Dann den String ausgeben
    cout<<*point_to_data;
    //...
    }
    
    void Funktion(){
    string* data=new string;
    //...
    point_to_data=data;
    //...
    }
    

    Theoretisch müsste dass doch funktionieren!
    Wenn ich den string *point_to_data in der Funktion ausgeben lasse ist er noch komplett, aber wenn ich ihn in meiner main Funktion ausgeben lasse ist nur noch ein Teil vom Ende vorhanden 😕 Wenn es hilft die Frage zu beantworten: In dem string ist eine Internetseite also mit Lehrzeichen etc.

    Ich hoffe jemand weiß woran das liegt, wär toll.

    Klar! Du machst etwas falsch!
    Wahrscheinlich in dem Teil, der mit "//..." gekennzeichnet ist, oder in Zeile 42...

    Das hier tut's für mich:

    #include <string>
    #include <iostream>
    #include <ostream>
    
    std::string* point_to_data;
    
    void Funktion()
    {
      std::string* str = new std::string;
      *str = "Hello from Funktion";
      point_to_data = str;
    }
    
    int main()
    {
      Funktion();
      std::cout << *point_to_data << '\n';
      return 0;
    }
    

    Wobei ich mich frage, ob man wirklich globale Daten (eher nicht) und dann auch noch einen Zeiger auf string (eher ungewöhnlich) nehmen will.



  • Wo wird den der string wieder zerstört?



  • drakon schrieb:

    Wo wird den der string wieder zerstört?

    In dem (schlechten) Beispiel gar nicht.

    Wie gesagt: Wieso will man da einen Zeiger auf einen string nehmen?



  • Was spricht den dagegen den String einfach zu kopieren? Dann hast du diverse Probleme nicht. Performance ist das nicht schlimm, da du das ja nicht sehr oft machst.



  • drakon schrieb:

    Was spricht den dagegen den String einfach zu kopieren? Dann hast du diverse Probleme nicht. Performance ist das nicht schlimm, da du das ja nicht sehr oft machst.

    Naja, wenn man eh ein globales Objekt benutzt (pfui), braucht man nix zu kopieren.



  • Nutz lieber keine Zeiger auf strings... und anstelle der globalen variable/zeiger schreib doch lieber ne funktion die den inhalt des strings returnt.



  • Quellcode schrieb:

    Nutz lieber keine Zeiger auf strings... und anstelle der globalen variable/zeiger schreib doch lieber ne funktion die den inhalt des strings returnt.

    Als was "returnt" ? Als Zeiger ? Als Objekt (d.h. Kopie) ?

    Ich würde das so vorschlagen:

    void Funktion(std::string& str)
    {
        str = "blah";
    }
    

    Und in main() dann:

    int main()
    {
       std::string str;
       Funktion(str);
       return 42;
    }
    


  • Danke für die viel Antworten,
    stimmt des Beispiel war net der Hammer.
    Jetz klappts mit ner einfachen Kopie von dem String.
    Was ich immernoch net versteh warum einfach ein Teil von dem String weg war.


Anmelden zum Antworten