2009-05-18 13 views
2

Ist das richtig, es OKWie ein String-Variable in c wiederzuverwenden ++

string str("in.dat"); 
ifstream fin(str.c_str(), ios::binary | ios::ate); 
. 
. 
. 
//Do I need to clear the string before assigning new name??? 
str = "out.dat"; 
ofstream fout(str.c_str(), ios::binary); //seems to work 

Grüße

Antwort

2

Was funktioniert, wie Sie richtig getan ist. Der Operator = überschreibt den String-Inhalt. Es ist normal, die String-Variable wiederzuverwenden. Es wird wahrscheinlich auch keinen Puffer neu zuweisen, sondern stattdessen wiederverwenden.

2

Es ist richtig, dies zu tun. Zuweisung in einer beliebigen Sprache bedeutet Das Objekt verliert seinen alten Wert und erwirbt einen neuen.

+0

Danke sehr geschätzt –

1

Nein, nur die Zuweisung eines neuen Wertes ist in Ordnung. Es liegt in der Verantwortung der String-Klasse, sicherzustellen, dass die Zuweisung funktioniert und keine Lecks entstehen.

+0

Danke für die Hilfe –

6

Was alle anderen gesagt haben, ist wahr. Doch in dem Code geschrieben, Sie könnte genauso gut sagen kann:

ifstream fin("in.dat", ios::binary | ios::ate); 
ofstream fout("out.dat", ios::binary); 
+0

ich hinzufügen könnte es zu bevorzugen ist. Aus Sicht des Code-Lesens. – xtofl

+0

Hängt davon ab, ob er den Namen für etwas anderes (wie eine Fehlermeldung) in dem Code verwendet, den er nicht gepostet hat. Ich wollte nur wissen, dass er nicht immer s.c_str() benutzen musste. –

1

Obwohl es gültig C++ ist, ist es nicht sehr schön C++.

Der Leser Ihres Codes muss daran denken, dass die Variable str veränderbar ist und in Ihrer Codedatei einen anderen Zweck erfüllt. Wenn Code zwischen der zweiten Zuweisung von str und seiner Verwendung als Dateiname eingefügt wird, kann es für den Leser schwierig sein herauszufinden, was in der Variablen enthalten ist.

Es ist immer besser, Ihren Variablen einen vernünftigen Namen zu geben; es wird dann fast immer konstant.

const char* inputpath("in.dat"); 
ifstream inputstream(inputpath, ...); 

const char* outputpath("out.dat"); 
... lots of code 
ofstream outputstream(outputpath, ...); 
+1

Die Dateistromkonstruktoren nehmen als ersten Parameter ein const char * und keine std:; string. –

+0

Danke, Neil. Korrigiert das. – xtofl

Verwandte Themen