string to int (the ansi way)
-
Hallo zusammen
gibt es eigentlich einen tollen, einfachen ANSI-konformen Weg einen string in einen Integer umzuwandeln. atoi() strtol() haben alle ein Problem falls im String eine 0 drin steht (d.h. mein weiß nicht ob eine 0 im string steht oder ein nicht konvertiert worden konnte. Manche Implementationen setzten errno entsprechend. Aber das ist leider nicht im Standard drinne).
Danke schön
P.S.: Was ham die eigentlich geraucht als sie die C-Library designed haben?
-
sscanf() sollte überall funktionieren.
-
strtolunterstützt eine Rückgabe einesend-Zeigers. Über diesen kannst du kontrollieren ob die zurückgegebene 0 ein Fehler oder ein gültiger Wert ist.Grüssli
-
lzm schrieb:
atoi() strtol() haben alle ein Problem falls im String eine 0 drin steht (d.h. mein weiß nicht ob eine 0 im string steht oder ein nicht konvertiert worden konnte.
Was für eine 0? Was für ein Problem? Bei atoi() muss man eben schon wissen, was man hineinwirft. Bei strtol() kann man alles über den Endzeiger und die Rückgabe erfahren.
sscanf() sollte überall funktionieren.
Klar, und demnächst fliegen wir mit dem Flugzeug zum Bäcker.

-
Dravere schrieb:
strtolunterstützt eine Rückgabe einesend-Zeigers. Über diesen kannst du kontrollieren ob die zurückgegebene 0 ein Fehler oder ein gültiger Wert ist.Grüssli
Ist mir gerade nicht ersichtlich.
Also
char * endptr; strtol(" 0", &endptr, 10);Zeigt dann auf das Zeichen nach '0' oder? Soll ich dann einfach überprüfen ob
*(--endptr) == '0'ist.Mein Gott wie hässlich

-
lzm schrieb:
char * endptr; strtol(" 0", &endptr, 10);Zeigt dann auf das Zeichen nach '0' oder? Soll ich dann einfach überprüfen ob
*(--endptr) == '0'ist.Die Glaskugel schlägt vor, dass du eher sowas prüfen willst:
*endptr == 0lzm schrieb:
Mein Gott wie hässlich

Mein Gott, wie effizient.

-
Also
int strToInt(char * str, int * result) { char *endptr; *result = strtol(str, &endptr, 10); return (*endptr == 0); }Ist eine Funktion die nonzero liefert genau dann wenn in str ein gültige Zahl steht und in result steht das Ergebnis?
-
lzm schrieb:
Also
int strToInt(char * str, int * result) { char *endptr; *result = strtol(str, &endptr, 10); return (*endptr == 0); }Ist eine Funktion die nonzero liefert genau dann wenn in str ein gültige Zahl steht und in result steht das Ergebnis?
Mit
*endptr == 0siehst du nach, ob strtol() bis zum Ende des Strings konvertiert hat (die Klammern nach demreturnsind nicht nötig). Der einzige Fall, der da noch durchfällt, ist der, dassstrauf einen leeren String (ein Nullbyte) zeigt.
