Adressproblem?



  • Hi Everybody!

    char Zeit[8];
    char Datum[10];
    time_t Zwitstempel;
    tm *nun;
    
    Zwitstempel= time(0);
    nun= localtime(&Zwitstempel);
    
    sprintf(Zeit, "%02i:%02i:%02i", nun->tm_hour, nun->tm_min, nun->tm_sec);
    sprintf(Datum, "%02i.%02i.%i", nun->tm_mday, (nun->tm_mon + 1), (nun->tm_year + 1900));
    
    printf("\r\n%s %s", Zeit, Datum);
    

    Das ist mein Quelltext!
    Rauskommen sollte eigentlich:

    hh:mm:ss DD:MM:YYYY
    

    Er gibt aber raus:

    16:30:2111.04.2007 11.04.2007
    

    Hab ich irgendwas unsauberes oder verbotenes in meinem Quelltext
    angestellt?
    Wieso ist das so?

    Danke schonmal für die Hilfe 🙂



  • LonelyBert schrieb:

    Hi Everybody!

    char Zeit[8];
    char Datum[10];
    time_t Zwitstempel;
    tm *nun;
    
    Zwitstempel= time(0);
    nun= localtime(&Zwitstempel);
    
    sprintf(Zeit, "%02i:%02i:%02i", nun->tm_hour, nun->tm_min, nun->tm_sec);
    sprintf(Datum, "%02i.%02i.%i", nun->tm_mday, (nun->tm_mon + 1), (nun->tm_year + 1900));
        
    printf("\r\n%s %s", Zeit, Datum);
    

    Das ist mein Quelltext!
    Rauskommen sollte eigentlich:

    hh:mm:ss DD:MM:YYYY
    

    Er gibt aber raus:

    16:30:2111.04.2007 11.04.2007
    

    Hab ich irgendwas unsauberes oder verbotenes in meinem Quelltext
    angestellt?
    Wieso ist das so?

    Danke schonmal für die Hilfe 🙂

    Deine Buffer sind zu klein (abschließendes \0 nicht vergessen).
    Für 8 bzw. 10 Zeichen brauchst Du also 9 bzw. 11 Byte...
    Hier hat der Compiler halt "Datum" direkt hinter "Zeit" angelegt. Im Speicher sieht das dann aus:

    ZZZZZZZZDDDDDDDDDD
    16:30:2111.04.2007
    

    Es sollte aber aussehen (^ steht hier für '\0'):

    ZZZZZZZZZDDDDDDDDDDD
    16:30:21^11.04.2007^
    

    Das ist aber Zufall - Dein Programm könnte auch einfach mit einem segmentation fault abstürzen... oder Deine Homebankingpassworte ber eMail verschicken. 😉

    Gruß,

    Simon.



  • Danke Mann!

    Gruß



  • Gern geschehen !

    Danke von mir auch für die vorbildliche Fehlerbeschreibung ! 👍

    🙂

    Übrigens (da wir hier schon im C++-Forum sind): Mit C++-Boardmitteln (stringstreams) wäre das nicht passiert. :p 😉

    Gruß,

    Simon2.


Anmelden zum Antworten