komplett fehlerhafte ausgabe einer funktion (nutzt SYSTEMTIME)



  • hi

    wenn ich die untere funktion ausführe und den rückgabewert ausgeben lasse bekomme ich LOGTXT_PART1 mit ausgegeben.
    wieso das?
    ich benutze dort garnicht LOGTXT_PART1

    ich habe diesen codeabschnitt

    //statt asdf steht hier eine große menge htmlcode. allerdings wird dieser post 
    //für spamm gehalten wenn ich den htmlcode stehen lasse......
    #define LOGTXT_PART1 	"awdsf"\
                             "asdf"
    
    #define LOGTXT_PART2	"asdf" \
    						"asdf"
    
    #define LOGTXT_END		"asdf"
    
    string timeAsString(){
    	SYSTEMTIME STime;
    	GetSystemTime(&STime);
    
    	string sRet="";
    	sRet.append(""+STime.wDayOfWeek+1);
    	sRet.append("."+STime.wMonth);
    	sRet.append("."+STime.wYear);
    	sRet.append("  "+STime.wHour+1);
    	sRet.append("_"+STime.wMinute+1);
    	sRet.append("_"+STime.wSecond);
    	sRet.append("_"+STime.wMilliseconds+1);
    
    	return sRet;
    };
    

  • Mod

    Du kannst auch keinen Wer tauf diese Weise umformen:

    ""+STime.wDayOfWeek+1
    

    Du addierst zu einem consat char * einen Wert, der in das Nirwana zeigt. Das muss schief gehen.

    Also:
    sprintf verwenden oder _ltoa oder eben die std stream Funktionen...

    PS: Lies mal etwas mehr über die Grundlagen von C/C++.



  • Erstens suchtst du wahrscheinlich nach einer Funktion wie GetLocalTime.
    Außerdem klappt das Anfügen von Integern (WORDs in diesem Beispiel), wie Martin Richter bereits geschrieben hat, an einen String so nicht, du kannst aber folgende Hilfsklasse nutzen (ich hatte so etwas Ähnliches hier rumliegen).

    #include <iomanip>
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    class LocTime
    {
    public:
        LocTime();
        ~LocTime() {}
    
        friend ostream& operator<<(ostream& o, const LocTime& s);
    private:
        SYSTEMTIME st;
    };
    
    LocTime::LocTime()
    {
        GetLocalTime(&st);
    }
    
    ostream& operator<<(ostream& o, const LocTime& s)
    {
        o<<setfill('0')<<s.st.wDay<<"."<<setw(2)<<s.st.wMonth<<"."<<setw(4)<<s.st.wYear;
        o<<", "<<setw(2)<<s.st.wHour << ":"<<setw(2)<<s.st.wMinute<<":"<<setw(2)<<s.st.wSecond;
        return o;
    }
    
    // Zugriff:
    LocTime t;
    stringstream s;
    s<<t;
    // s.str() kann nun verwendet werden
    

    Die Ausgabe sieht dann in etwa so aus:

    22.12.2010, 19:55:18
    

    Alternativ kannst du auch Hilfsfunktionen wie

    template<class Type>
    std::basic_string<TCHAR> ToString(Type val)
    {
    	std::basic_ostringstream<TCHAR> o;
    	o << val;
    	return(o.str());
    }
    

    oder für Arrays Funktionen wie sprintf, itoa etc. nutzen.


Anmelden zum Antworten