variable in fopen

sim4000

sim4000

Lebende Foren Legende
Guten Tag Linuxgemeinde.

Vorwort: Bitte nicht mir gleich wieder an den Hals springen. Weiß immer nich wo nach ich suchen sol...
Also: Mal wieder ein Problemchen. Ich hab zwei string-Variablen (Davon ist einer ein Array). Eine Fragt den dateinamen ab, und die andere die dateiendung.

Das sieht so aus:
Code:
void erstellen(void) {
string datei = dateinamen[ersteller] + "." + dateityp;
   do{
     FILE* oeffnen;     // ein File-Poiinter wird erstellt
     oeffnen = fopen(datei, "w");
     fclose(oeffnen); // Datei wieder schließen
     ersteller--;
   } while(ersteller!=0);
}

Die beiden variablen werden wie oben ja gezeigt, in einen Dateinamen umgewandelt.
Also aus "name" und ".cpp" wird name.cpp. Das soll jetzt in fopen eingespeisst werden, damit dieser eine Datei mit dem dateinamen datei.cpp erstellt. Und da ist der Hacken. Was muss ich mach damit es klappt. Ich kann auch mit der Fehlermeldung vom Compiler nicht viel anfangen...

Code:
sim4000@sim2:~/Desktop> g++ fileadder.cpp
fileadder.cpp: In function »void erstellen()«:
fileadder.cpp:62: Fehler: »std::string« kann nicht nach »const char*« für Argument »1« nach »FILE* fopen(const char*, const char*)« umgewandelt werden

Kann mir mal jemand bitte helfen?
Mfg, sim4000.
 
sim4000 schrieb:
Code:
oeffnen = fopen(datei, "w");

die Funktion c_str() wandelt Dir den string in einen char* um:
Code:
oeffnen = fopen(datei.c_str(), "w");

[klugscheiss]
Weshalb mischst Du C und C++-routinen? Es gibt doch ifstream unter C++ (wofuer Du allerdings immernoch c_str() benoetigst).
Und Du benutzt doch nicht etwa globale Variablen? Oder ist das Codefragment nur unvollstaendig?
[/klugscheiss]
 
das liegt glaube ich nicht an fopen. Bei C++ benutzt man ja eigentlich fstream, hab ich dir doch ein BSP geschickt ;)

Kannst du den String 'datei' mit cout ausgeben ohne fehler wenn ja, dann wandel es mal in einen CArray um. Ansonsten STL, da müsste es drinnen sein oder? sowas wie strcat, ...

//Edit mist 2.er
 
Nun, wie es schon in der Fehlermeldung steht, hat der Compiler keine Ahnung wie er einen string in einen const char* (den fopen erwartet) konvertieren soll. :D

Schreib' in fopen einfach "datei.c_str()"

Eine schöne Übersicht über C++ String findest Du hier: http://www.cppreference.com/cppstring/index.html

Gruss
Heiko

Edit: Oh'man, sind die hier aber fix :-)
 
Weshalb mischst Du C und C++-routinen?
Weiß ich nicht. Ich hab ein Beispiel wie dieses im Netz gefunden, und einfach mal getestet. und es hat gefunzt.

Du benutzt doch nicht etwa globale Variablen?
Doch 4 stück. Da die in mehreren Funktionen gebraucht werden. Schlimm?

Mfg, sim4000.
 
Weiß ich nicht. Ich hab ein Beispiel wie dieses im Netz gefunden, und einfach mal getestet. und es hat gefunzt.


Doch 4 stück. Da die in mehreren Funktionen gebraucht werden. Schlimm?

Mfg, sim4000.

Globale Variablen sind ein Albtraum, v.a., wenn der Code groesser wird und/oder Du Code von anderen Leuten bearbeiten musst.
 
Zuletzt bearbeitet:
Ich weiß ich weiß.
Ist mir eben grad nach abschicken des Beitrags wieder eingefallen.

Hab in der Schule grad Objekte. Wenn ich das richtig drauf hab änder ich das. Aba das Programm ist ja noch nicht sehr gross...

Mfg sim
 
Das erzaehlt einem zwar jeder Opa, aber: Die Warnung vom falschen Angewoehnen hat durchaus seine Berechtigung. Klar sagt man sich, dass mans jetzt so und spaeter "richtig" macht, aber vielleicht ging bis dahin alles glatt und spaeter denkt man "Naja, das mit den globalen Variablen hat doch bisher immer funktioniert, da koennt ich doch...".
Natuerlich nicht nur auf dieses Beispiel beschraenkt...
 
Vielleicht. Aber nicht in meinem Fall. Ist schon lange geändert.
Hab Klassen in das Programm eingebaut.
Hat sich also offiziell mit den Globalen Variablen erledigt.

Mfg, sim.
 

Ähnliche Themen

g++ kompilieren schlägt fehl

Aus Datei lesen

Matpack installation

skript aus der kommandozeile starten

struct in Datei speichern

Zurück
Oben