.| Autor | Beitrag |
|---|---|
|
000 13.01.2007, 16:20 Felheart |
Vieleicht bin ich einfach gerade nur zu blöd aber ich kriegs einfach ned hin: die erste ist sozusagen eine "Html-erzeug-verwaltungs" engine :)
das problem dabei ist leider das ich ja nie wissen kann wie groß der text im CLP aber ich kann ned einfach char[] machen weil ich ja die initialisierte variable baruch um beim aller ersten aufruf schon überprüfen muss ob sich der text geändert hat teufelskreis... hier noch der (vermukste: nich mal ein return drinne...) code um text aus dem CLP (Zwischneablage) zu holen...
Dieser Beitrag wurde am 13.01.2007 um 16:24 von Felheart bearbeitet. |
|
Profil || Suche |
|
001 13.01.2007, 17:04 theDon |
Optimal, du schreibst so viel Text in den Buffer, wie gerade an der Adresse, die dem Wert von Size entspricht (standardmaessig 10, also 0xA) steht. Das funktioniert so circa nie. Nutz einfach std::string, dann hast du da schon einmal einige Probleme weniger (zum Beispiel die Konversion von Int nach char*, die naemlich mit einem Cast ziemlich genau nicht das macht, was du erwartest. Dafuer braeuchtest du naemlich sprintf()) Zudem solltest du zusehen, dass buffer gross genug ist, 512 duerfte da ziemlich sicher eng werden. Auch das Problem wuerde mit std::string nicht auftreteten. --\o tanz den naziprau! o/ And more than ever, I hope to never fall, Dieser Beitrag wurde am 13.01.2007 um 17:05 von theDon bearbeitet. |
|
Profil || Suche |
|
002 13.01.2007, 17:20 Felheart |
Also aus char buffer[512]; -> string buffer=""; und aus strcat(buffer,"<font size="); strcat(buffer,(char*)Size); strcat(buffer,">"); oder was? ist das beispiel so richitg? Edit: wie ist es mit dem übergeben von parametern? string Funktion(string txt){ edit2: thedon: Nutz einfach std::string, dann hast du da schon einmal einige Probleme weniger (zum Beispiel die Konversion von Int nach char*, die naemlich mit einem Cast ziemlich genau nicht das macht, was du erwartest.
Dieser Beitrag wurde am 13.01.2007 um 18:29 von Felheart bearbeitet. |
|
Profil || Suche |
|
003 13.01.2007, 18:34 theDon |
Wie waers denn zum Beispiel einfach mit logfile << buffer, das funktioniert dann naemlich auch. Statt append kannst du einfach += nutzen: buffer += size (da wird dann auch konvertiert). Ansonsten koenntest du auch einfach direkt in den ofstream schreiben, dann sparst du dir den gesamten Overhead, den du durch die doppelte Pufferung hast. --\o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
004 13.01.2007, 19:29 Felheart |
logfile << buffer; genau so hab ich es ja auch schon am anfang gemacht, aber dann kommt eben: error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich) genauso ist es mit den folgenden: buffer.append(time.wHour); time ist die variabele SYSTEMTIME erzeugt den fehler: std::string macht da doch etwas viele probleme ^^ wie kann ich die ganzen dinger denn so konvertieren das sie der strign annimmt? ich bin wirklich total ratlos... Edit: das mit dem buffer += (irgendwas) ist gut ;) Edit: Dieser Beitrag wurde am 13.01.2007 um 21:22 von Felheart bearbeitet. |
|
Profil || Suche |
|
005 14.01.2007, 00:35 theDon |
Besorg dir einen Compiler, der nicht kaputt ist. -- \o tanz den naziprau! o/ And more than ever, I hope to never fall, |
|
Profil || Suche |
|
006 14.01.2007, 11:54 Felheart |
Sorry aber ich weis jetzt ned was du meinst oO was ist an meinem Compiler den kaputt ? soll ich dir mal den source von meinem Projekt per PM senden ? :/ -- |
|
Profil || Suche |
|
007 14.01.2007, 14:09 HammerBlade |
theDon meint mit 'kaputt', dass er nicht standardkonform sei. Edit: Welche STL Implementierung soll das können? Meine hier mit MinGW kann das nicht. An einen String kann ich nur weiter Strings konkatenieren. Felheart, was theDon eigentlich meint, ist, dass du dir das Schreiben in den String sparen sollst, weil du damit 1. eine unnötige Zwsichenspeicherung hast und man 2. ohne Aufwand an einen String nur String, char* und char konkatenieren kann. Ein ofstream ist da viel besser der hat << für viel mehr Typen:
"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon Dieser Beitrag wurde am 14.01.2007 um 14:37 von HammerBlade bearbeitet. |
|
Profil || Suche |
|
008 14.01.2007, 14:51 theDon |
Eine konforme Implementierung kann das, weil der entsprechende Konstruktor nicht explicit ist und Konkatenierung keine Memberfunktion von basic_string ist. Edit: Das funktioniert so natuerlich nur, wenn size ein string oder ein char* ist. Fuer entsprechende Konversion braeuchte man da einen stringstream. --\o tanz den naziprau! o/ And more than ever, I hope to never fall, Dieser Beitrag wurde am 14.01.2007 um 15:17 von theDon bearbeitet. |
|
Profil || Suche |
|
009 14.01.2007, 15:43 Felheart |
gibt es einen patch oder ein update für mein MSVS05 damit der Compiler "standartkonform" wird ? oder muss ich da gleich die ganze IDE wechseln ? ich würde eben schon gerne bei Microsoft VS bleiben :/ -- |
|
Profil || Suche |
|
010 14.01.2007, 15:53 HammerBlade |
Nein nein, ist alles okay. Bleib bei MSVS05, der ist schon mal um längen besser als MSVS6. Um die Verwirrung, die hier herschte mal zu beseitigen: Ein ofstream hat << für alle möglichen Typen, string hat << nur für andere string's. Abgesehen davon solltest du wie ich oben schon sagt gleich in den ofstream schreiben und nicht erst in einen string und diesen dann in den ofstream. --"Mit C++ (noch besser mit C) kann man sich _sehr_ leicht in den Fuss schiessen." - theDon |
|
Profil || Suche |
|
011 14.01.2007, 21:37 K-Putt |
Hab jetzt aus Zeitmangel nicht alles gelesen, will daher nur anmerken, dass du - sofern du es in ne Variable, schreiben, und nicht ausgeben willst - mit ostringstream machen kannst. Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database |
|
Profil || Suche |

