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 H
    

    Wie 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 nicht
    

    Same 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?


Anmelden zum Antworten