Problem mit vsprintf, std::ifstream
-
Hi,
char Temp[256]; // Ist wohl auch sehr gefährlich, wie mache ichs besser? va_list Args; va_start( Args, Format ); vsprintf( Temp, Format, Args ); va_end( Args ); // Nun schreibe ich Temp in eine Datei mit std::ifstream... - > C R A S HWie behebt man das in C++? Oder wie wird da so was umgesetzt...? Danke
-
Der Code mit deinem Stream wär interessant.
-
char Temp[256]; va_list Args; va_start( Args, Format ); vsprintf( Temp, Format, Args ); va_end( Args ); time_t TNow; time( &TNow ); TmNow = localtime( &TNow ); printf( "%s", Temp ); /* LogFile << TmNow->tm_mday << "." << TmNow->tm_mon << "." << ( TmNow->tm_year + 1900 ) << ", " << TmNow->tm_hour << ":" << TmNow->tm_min << "\t:\t" << Temp << std::endl; */
-
Erstens: Bist du dir wirklich sicher, daß die angeforderte Größe ausreicht für den Text, den du schreiben willst? Es gibt zwar keine printf()-Variante im Standard, die selber ausreichend Speicher anfordert - aber es gibt vsnprintf(), dem du mitgeben kannst, wieviel Platz du zur Verfügung hast.
Zweitens: Variable Argumentlisten sind generell unsicher. Deshalb gibt es auch die IOStreams als bessere Alternative zur printf()-Familie. Und wenn möglich, solltest du dein Design umstellen, so daß du mit einem Stringstream arbeiten kannst.
-
char Temp[1024 * 4]; va_list Args; va_start( Args, Format ); vsnprintf( Temp, sizeof( Temp ), Format, Args ); //( Temp, Format, Args ); va_end( Args ); time_t TNow; time( &TNow ); TmNow = localtime( &TNow ); printf( "%s", Temp ); // Klappt LogFile << TmNow->tm_mday << "." << TmNow->tm_mon << "." << ( TmNow->tm_year + 1900 ) << ", " << TmNow->tm_hour << ":" << TmNow->tm_min << "\t:\t" << Temp << std::endl; // Klappt nichtSame again. Crash! Ich muss das so lösen, warum spinnen hier die Streams rum???

Das ganze wird in einem Dekonstruktor aufgerufen. Kann das was damit zu tun haben? Wie kann ich das Problem mit evtl. zu kleinen Buffern lösen?