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:YYYYEr gibt aber raus:
16:30:2111.04.2007 11.04.2007Hab 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:YYYYEr gibt aber raus:
16:30:2111.04.2007 11.04.2007Hab 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.2007Es 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.