Typenumwandlungsproblem!
-
Wie kann ich den Inhalt von diesen Variablentyp:
char var1[100]
in diesen hineinschreiben:
char* var2;
ich hab es schon mit Stringsteams probiert, das klappt aber nicht:
#include <sstream> stringstream sstr; char var1[100]; char* var2; sstr << var1; sstr >> var2;
Gruß skontox
-
Warum willst du das tun?
-
wenn ich das richtig verstanden habe was du willst, sollte das so gehen:
#include <iostream> using namespace std; int main() { int i; char var1[100]; for (i=0; i<100; ++i){ var1[i]='y'; cout<<var1[i]<<endl; } cout<<"Jetzt var2:"<<endl; char* var2= new char[100]; for (i=0; i<100; ++i){ var2[i]=var1[i]; cout<<var2[i]<<endl; } return 0; }
-
zu Bashar:
Weil meine Funktion ein "char*" zurückliefern muß!
Diese Funktion liefert mir eine private membervariable zurück in der der Inhalt einer Datei stehen soll.
Ich hab den Inhalt allerdings in einer Variable vom Typ char [100] eingelesen.
Und nun muß ich von char [100] in char* konvertieren.
Leider kann ich die Variablen nicht einfach zuweisen, da das Programm dann abbricht.
Gruß skontox
-
Na wenn das so ist:
class X { private: char buffer[100]; public: void read_from_file(FILE* f); char * get_buffer(); }; char * X::get_buffer() { return buffer; }
Entspricht das in etwa deinem Setup? Sollte so zunächst keine Schwierigkeiten machen. Jedenfalls ist das keine Frage der Typumwandlung, sondern der Lebenszeit des Buffers. Statisch, dynamisch oder automatisch?
-
Ich hab Deins aber noch nicht berücktsichtig, da Du schneller warst als ich (bashar)! Schau ich mir sofort an! Herzlichen Dank erstmal!
Ich glaube ich hab mich schlecht ausgedrückt:
Also nochmal:
class File { public: // construtor File(); // destructor ~File(); // method for opening the configuration-file ("config") char* OpenConfig(); // method which returns the content of the configuration-file ("config") char* GetContent(); private: char* content; //contains the data from config file } char* File::OpenConfig() { ifstream file("config"); // File "config" char buf[100]; char* error; ... while(!file.eof()) { file.read(buf, sizeof(buf)-1); read=file.gcount(); } this->content=buf; // <---das klappt leider nicht!!! Aber wie sonst??? return error; } char* File::GetContent() { return this->content; //returns private membervariable }
Gruß skontox
-
Dir auch besten Dank "fluffy"!
Gruß skontox
-
zu Bashar:
Deine Lösung war anfangs auch meine, aber das Programm bricht dann immer mit Signal 11 ab. So ein Mist!
Gruß skontox
-
Aber nicht vergessen, den Speicher nachher wieder freizugeben, sonst kriegst du Speicherlöcher. In C++ würdest du für sowas wahrscheinlich eher mit std::string arbeiten, also:
#include <string> std::string get_some_string() { std::string s = "Hello, World!"; return s; }
in C würdest du einen Buffer und seine Länge übergeben:
char *get_some_string(char *buf, size_t buflen) { /* ...hier den String in buf einlesen, aber nicht mehr als buflen - 1 Zeichen */ return buf; }
..und es dann nachher so aufrufen:
char s[100]; puts(get_some_string(buf, 100));
Die Idee dahinter ist, Speicherlöcher und Buffer Overflows zu vermeiden. fgets macht es zum Beispiel genauso.
-
Besten Dank erstmal!
Ich werde mir das jetzt mal genau anschauen, ob ich das vielleicht für mein Programm verwerten kann!Gruß skontox