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++
-
freakC++ schrieb:
Weiß jemand woran es liegt?
Der Zeiger zeigt auf
FNumber. Wenn du ihn dereferenzierst, hast du dasFNumberObjekt. Wenn du dem dereferenzierten Objekt also etwas hinzufügst, dann fügst du dies demFNumberObjekt 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 istString?
Was ist das für eindelete 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.
-
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.
-
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::stringaus dem Header<string>.
Kauf dir mal ein vernünftiges C++ Buch
Edit @ pumuckl:
Schreib nicht so schnell! :pGrü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++