atoi liefert falsche Werte?
-
Hi,
ich habe einen char buffer z.B. time[10] mit den format "hhss"
Also dachte ich mit mache ich malchar hour[2] = "\0"; char minute[2] = "\0"; char second[2] = "\0";
dann sagen wir mal Uhrzeit ist 10:59:31
nu kopieren wir dat dann mal janz einfach
hour[0] = time[0]; hour[1] = time[1]; minute[0] = time[3]; minute[1] = time[4]; second[0] = time[6]; second[1] = time[7];
danach ist die Welt noch in Ordnung
hour ist "10" minute ist "59" und second ist "31"
dann das...
int iHour = atoi(hour); int iSecond = atoi(minute); int iMinute = atoi(second);
ok, iHour ist 10!
Aber iMinute ist 5910 und iSecond 315910Häh?
Gruß
Franky
-
Upppsili,
kann es sein, das ich einen buffer[3] zur Verfügung stellen muß, damit das letzte Element "\0" ist.
Gruß
-
Ganz falsches Forum, das gehört ja sogar ins C Forum!
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
atoi ist Schrott, für deinen Fall reicht
if( 1==sscanf(hour,"%2d",&iHour) ) puts("OK");
usw.
-
für zweistellige Zahlen brauchst du aber 3 Zeichen. "10" wird durch { '1', '0', '\n' } abgebildet. Da die \0 Terminierung fehlt, kann alles mögliche passieren.
-
ganz offensichtlich passiert alles mögliche!
Definitiv ratsam ist der Grundsatz "lieber ein Byte mehr".
Außer Du bewegst Dich nur auf irgendwelchen Mikromükroprozessoren...