Typenumwandlung / Stringverknüpfungen

gl4di4t0r

Mitglied
Hallo,
ich habe ein kleines Programm in C++ geschrieben, indem es eine Ausgabe gibt und diese soll nun in einer Datei gespeichert werden.
Jetzt habe ich ein paar Fragen:
1. Wie kann man int (oder einen anderen Datentyp) in const char * umwandeln (casten)?
Bsp.:
Code:
char *i = (char)intvariable;
Das klappt ja nun nicht, weil das ein gewöhnlicher nach char Cast ist, wie geht das mit dem * ?
2. Der Benutzer wird gefragt wo die Datei gespeichert werden soll. Also eine Frage nach dem Laufwerk und eine nach dem Namen der Datei. Diese beiden Variablen möchte ich nun zusammenfügen, aber wie?
In c# geht das ja meines Wissens so:
Code:
VariableGes = Varialbe1+Variable2;
bzw.
Code:
Console.WriteLine("blablub" + Varialbe123);
Nun habe ich soetwas:
Code:
stream = fopen("text.txt", "w" );
und möchte das so mahcen:
Code:
      char *Laufwerk,*Dateiname;
      stream = fopen(Laufwerk+Dateiname, "w" );
      bzw.
      stream = fopen(Laufwerk+"datei.txt", "w" );
Dies gibt mir natürlich immer einen Fehler.
Ich hoffe ihr versteht, was ich meine :)
3. Wie kann ich Fehler abfangen?
In c# gibts ja den try-catch-block, wie geht soetwas unter c++?


gruß gl4di4t0r

P.S.: Es handelt sich hierbei um ein Konsolenprogramm, welches verschiedengroße Dateien erstellt.
 
Zuletzt bearbeitet:
zu 2.:
Wenn du schon C++ verwendest, dann kannst du auch auf die Stringklassen der Standardbibliothek zurückgreifen. Damit wäre z.B. folgendes möglich:
Code:
std::string str1 = "foo";
std::string str2 = "bar";
std::string str3 = str1 + str2;

cout << str3; // gibt "foobar" aus
Dazu musst du den Header <string> einbinden.

zu 1.:
Code:
std::stringstream ss;
ss << i;

char *szZahl = ss.str();
Einzubinden ist <sstream>.

zu 3.:
Auch mit try und catch.
 
Ahh Danke, werde ich gleich mal testen.

zu 3.
Ok, könntest du mir bitte ein Beispiel von einem "Datei nicht gefunden"-Fehlers zeigen?
Das würde mir sehr helfen.

P.S.: Habe gerade erst angefangen mit C++, da wir das jetzt in der Schule haben!
 
Zuletzt bearbeitet:
Schaumal:

Code:
#include <iostream>
#include <fstream>

using namespace std;

class IOException{
        private:
                string message;
        public:
                IOException(const string& message){
                        this->message = message;
                }

                const string& what(){
                        return message;
                }
};

void readfile(const char* filename) throw (IOException){
        ifstream in(filename);
        if(!in){
                throw IOException(string("File `") + filename + "` could not be opened for reading");
        }
        //todo: read out file
}

int main(){
        try{
                readfile("fwer.txt");
        }
        catch(IOException& e){
                cout << e.what() << endl;
        }
}

In C++ ist es im Gegensatz zu java auch möglich primitive
Datentypen zu schmeißen...

Desweiteren solltest du Exceptions immer per Referenz fangen...

Gruß

RedWing
 
Ok, Danke an Matthias Reitinger hat soweit bis jetzt alle sgeklapt.

@RedWing: Das werde ich mir Morgen mal angucken, sieht auf den ersten Blick für mich Neuling sehr kompliziert aus. :)
 
Das werde ich mir Morgen mal angucken, sieht auf den ersten Blick für mich Neuling sehr kompliziert aus.

So kompliziert wie es aussieht ist es nicht :)
Der Mechanismus mit den Exceptions funktioniert ähnlich wie in C# bzw Java..
Und da man C++ Objekte per Value und per Referenz übergeben kann,
steht da ein & um kenntlich zu machen das die Excpetion per Referenz
gefangen wird... Ähnliches gilt auch für die verwendeten Methoden...

Gruß

RedWing
 
Ich würde aber von std::exception ableiten, da man oft nur ein std::exception& fängt und damit alles unter einen Hut bekommen will.
 
Zurück