zeiger auf AnsiString



  • Braunstein schrieb:

    Das hat mit der oberen Anfrage aber nicht viel zu tun, oder? 🙂

    Vielleicht doch.
    Da ich genausowenig wie du weiss, was der Threadersteller eigentlich vorhat, hab ich mich gefragt, wofür er eigentlich einen Zeiger darauf braucht. Daher mein Ratschlag.



  • Naja, er wollte einen Zeiger auf AnsiString, c_str() liefert ein const char*. Das ist schon etwas Anderes.



  • Ich brauche tasächlich einen Zeiger für eine Parameterübergabe.
    Vielleicht habe ich meine Frage dumm gestellt. 👎
    Allerdings brauch ich einen Zeiger auf AnsiString.
    Momentan habe ich einfach den Text kopiert.

    AnsiString *pString;
    pString = new AnsiString;
    *pString = SuchEdit->Text;
    

    wollte aber wissen ob es irgendwie ohne umweg geht



  • Hallo

    das ist natürlich Unsinn. Zuerst reservierst du mit new neuen Speicher und weist den dem Pointer pString zu.
    Doch gleich danach willst du dem Pointer einen andern Speicherbereich zuweisen, was natürlich zur Folge hat das der reservierte Speicher im Nirvana verschwindet.
    Du solltets unbedingt noch mal ein Tutorial über Pointer und dynamichen Speicher durcharbeiten, da fehlen dir offensichtlich Grundlagen.

    Desweiteren wurde schon gesagt, das du direkt vond er Text-Eigenschaft keinen Pointer bekommen kannst. Dazu must du erstmal den String rauskopieren und dann desen Adresse holen.

    AnsiString Buffer = SuchEdit->Text;
    AnsiString *pString = &Buffer;
    

    Allerdings solltest du überprüfen ob du das wirklich brauchst, in C++ sollte man stattdessen mit (konstanten) Referenzen arbeiten.

    bis bald
    akari



  • Das hier

    AnsiString *pString;
    pString = new AnsiString;
    *pString = SuchEdit->Text;
    

    ist schon durchaus korrekt, wenn nachher nicht vergessen wird den Pointer wieder zu löschen. Hier verschwindet auch kein Pointer im Nirvana. Es ist aber natürlich kein Pointer auf den internen Speicher des Edit.



  • Hallo

    Hier verschwindet auch kein Pointer im Nirvana.

    Ich habe nichtg Pointer, sondern reservierte Speicher geschrieben. Und der verschwindet. Oder wie willst du, ohne zwischen die drei Zeilen noch eine weitere einzufügen, den reservierten Speicher wieder löschen?

    bis bald
    akari



  • Das delete muß ja nicht zwischen die 3 Zeilen, sondern irgendwo dahinter.

    *pString = SuchEdit->Text;
    

    Hier wird kein Pointer überschrieben sondern ein AnsiString kopiert.



  • ups
    geht das nicht so:

    delete pString;
    

    Der Pointer ist doch immer noch auf den reservierten Speicher gerichtet Oder?
    😕



  • Nach dem delete ist der Speicher natürlich nicht mehr reserviert.



  • Wenn die Funktion einen Zeiger auf Char erwartet kannst du den Wert direkt im Funktionsaufruf so übergeben:

    funktion(Edit1->Text.c_str());
    

    Wenn der Wert als Referenz erwartet wird, dann schaust du dir am besten mal die Hilfe zu c_str() an. Das Beispiel sollte dir helfen.



  • danke für alle Antworten 🙂


Anmelden zum Antworten