strings, chars
-
hi!
ich bin gerade beim umschreiben von char* variablen zu string, weil ich zu dem schluss gekommen bin, dass die einfach sinnvoller sind.
Allerdings habe ich noch ein paar probleme, da ich zuvor nie mit strings (*gg*) gearbeitet habe
Hier ist ein auszug aus meinem source code (das "out" steht in einer funktion in der zB die Var logfile definiert ist ...)bool Out(string text, ...) { va_list arg_list; va_start(arg_list, text); if((logfile = fopen("logs\\Log.htm", "a+")) == NULL) return false; vfprintf(logfile, (char*)text.c_str(), arg_list); fprintf(logfile, "<br>"); putc('\n', logfile); fclose(logfile); va_end(arg_list); return true; }
ich weiß es ist nicht sinnvoll die c funktionen mit c++ funktionen (templates) zu mischen, aber ich bin einfach zu faul die iostreams jetzt auch noch anzuschen...
der fehler liegt in der zeile vfprint ... ich hab mir gedacht, das ich mit den char* wert von text holen und diesen dann an die vfprintf zu übergeben, aber zur laufzeit bekomme ich da einen fehler ...achja: büße ich mit string viel performance ein? oder ist das egal??
danke im vorraus!
-
das mit dem ... Parameter geht nur mit PODs, also keinen Klassen und Strukturen mit ctor/dtor private-Elementen oä.
-
noch paar Hinweise:
vfprintf(logfile, (char*)text.c_str(), arg_list);
trotzdem ists boese was da machst ...
1. c_str() gibt dir nen const char * zurueck ... solltest also nicht casten brauchen ... da dein vfprintf da nen const char * haben will
2. (charist nen boeser C-Cast
3. wenn schon casten, dann bite keinen const wert (c_str() gibt nen zeiger auf const char zurueck) auf nen nicht const wert (char...
achja: büße ich mit string viel performance ein? oder ist das egal??
bool Out(string text, ...)
In dem Fall schon ... im gegensatz zur Zeigeruebergabe, kopierst du die Strings bei ner Zuweisung. Und ne Paramaeteruebergabe ist ne impliziete zuweisung.
besser :
bool Out(const string &text, ...) // du veraenderst ja den string ned !
C++ wird, wenn der C-Programmer gut ist, immer etwas mit der geschwindigkeit hinterherhinken... man kann es aber in grenzen halten ... dazu muss man sich aber von einigen C-Gewohnheiten loesen ... sonst wirds wirklich langsamer :p
ciao ...