Problem mit Pointer



  • Hallo allerseits,
    mich quält gerade ein Pointerproblem. Ich versuche zu Beginn einem Pointer eine Stringadresse zu übergeben, damit ihm ein Dateiname übergeben wird. Während
    einer Schleife wird etwas drangehängt und dann sollte der Zeiger gelöscht werden. Wenn nun der zweite Schleifendurchlauf beginnt,dann soll dem Zeiger von Neuem der Dateiname übergeben werden, damit wieder in der Schleife etwas Neues angehängt werden kann. Leider funktioniert das nicht, denn es wird immer nur Neues an den String gehängt. HIer der Code:

    if (C_GD2){
       int len;
       for (int i=0; i<dif; i++){
        String* filename=&FNumber; //Hier soll immer die Neuzuweisung stattfinden
        *filename+=i+start; //Hier wird dann was Neues angehängt
        len=snumb[i]->Length();
         for (int j=0; j<len; j++)
        *filename+=".txt" //und hier auch
        delete list;
       }
      }
    

    Weiß jemand woran es liegt? Außerdem wusste ich gar nicht, dass es auch Pointer auf Strings gibt...naja jetzt weiß ich es 😉

    Vielen Dank
    lg, freakC++


  • Administrator

    freakC++ schrieb:

    Weiß jemand woran es liegt?

    Der Zeiger zeigt auf FNumber . Wenn du ihn dereferenzierst, hast du das FNumber Objekt. Wenn du dem dereferenzierten Objekt also etwas hinzufügst, dann fügst du dies dem FNumber Objekt zu. Willst du nicht lieber eine normale Kopie machen?

    freakC++ schrieb:

    Außerdem wusste ich gar nicht, dass es auch Pointer auf Strings gibt...naja jetzt weiß ich es 😉

    Sobald etwas Speicher belegt, kann man einen Zeiger darauf zeigen lassen. Denn ein Zeiger ist nichts anderes als eine Speicheradresse.

    Noch ganz nebenbei:
    Was ist String ?
    Was ist das für ein delete list ?

    Grüssli



  • Naja, ich denke, dass es schneller ist, wenn ich immer wieder die Adresse von FNumber auslese und somit filename immer wieder von Neuem den Inhalt von FNumber zuweise. Wie müsste dies denn dann korrekt in C++ aussehen??

    Ich glaube dir nicht, dass Du nicht weißt, was ein String ist oder verstehe ich dich da falsch?

    Das mit list hätte ich eigentlich noch löschen müssen. Es ist die Instanze einer Borland Komponente TStringList (aber das ist ein anderes Forum).

    Könntet ihr mir mal einen Verbesserungvorschlag posten?

    Vielen Dank
    lg, freakC++



  • freakC++ schrieb:

    Ich glaube dir nicht, dass Du nicht weißt, was ein String ist oder verstehe ich dich da falsch?

    Du verstehst ihn falsch. normalerweise heißen die Dinger string (mit kleinem s), genauer gesagt std::string.


  • Administrator

    freakC++ schrieb:

    Naja, ich denke, dass es schneller ist, wenn ich immer wieder die Adresse von FNumber auslese und somit filename immer wieder von Neuem den Inhalt von FNumber zuweise.

    Schneller, ja, aber es ist nicht dein gewünschtes Verhalten, weil du dann nicht auf einer Kopie arbeitest, sondern immer auf dem gleichen Objekt. Die Zuweisung verändert auch gar nichts, sie überschreibt lediglich den Zeiger mit dem gleichen Wert. Ich empfehle dir dringends nochmals das Kapitel über Zeiger zu lesen!

    Mach eine Kopie:
    String filename = FNumber;
    usw.
    (Aber jetzt nicht mehr dereferenzieren!)

    Grüssli



  • Hallo,
    achso...im Borland Builder muss ich das groß schreiben.

    Ok, vielen Dank! Ich habs verstanden

    Bis dann
    lg, freakC++



  • freakC++ schrieb:

    Hallo,
    achso...im Borland Builder muss ich das groß schreiben.

    Nö. Musst du nur, wenn du die Borland-eigene String-Klasse verwenden willst, was dann allerdings wiederum kein portabler Code mehr ist. Soll heißen MSVC und gcc haben grundsätzlich erstmal keine Ahnung von der borland-String Klasse, während std::string mit jedem standardnahen Compiler funktioniert.


  • Administrator

    freakC++ schrieb:

    achso...im Borland Builder muss ich das groß schreiben.

    LoL, du musst? Nein, du musst nicht, es kommt höchstens darauf an, welche Stringklasse du benutzen willst. Es gibt eine Stringklasse aus der VCL des Borland Builders und es gibt die Standard Stringklasse std::string aus dem Header <string> .
    Kauf dir mal ein vernünftiges C++ Buch 😉

    Edit @ pumuckl:
    Schreib nicht so schnell! :p

    Grüssli



  • Dravere schrieb:

    Edit @ pumuckl:
    Schreib nicht so schnell! :p

    Ätsch 😉



  • ja, das war falsch ausgedrück! Ich muss nicht, aber ich habe es hier verwendet :p

    Vielen Dank
    lg, freakC++


Anmelden zum Antworten