Forum: PC-Programmierung atof() Rückgabewert bei Fehler?


von Flo (Gast)


Lesenswert?

Hi,

ich wollte wissen, was die atof()-Funktion bei fehler zurückliefert.

Beispiel:
1
//(1)richtig
2
float fl;
3
char chr[]="1.2345";
4
5
fl=atof(chr);
6
7
8
//(2)falsch
9
float fl;
10
char chr[]="143s5,z345";
11
12
fl=atof(chr);

wenn ich die (2) ausführe, wird mir alles bis "s" umgewandelt. Da das 
"s" nicht erlaubt ist, wird abgebrochen und "fl=143.000000" gesetzt.

Gibt es eine Funktion oder Möglichkeit auf Fehler zu prüfen?
Wenn "143s5,z345" kein float-Wert ist, will ich nicht dass 
"fl=143.000000" wird, sondern als Rückgabewert 0 / -1 oder sonst was 
erhalte

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

http://linux.die.net/man/3/strtof

und endptr mit angeben. Wenn *endptr != '\0' nach dem aufruf, dann wurde 
nicht alles umgewandelt

von Flo (Gast)


Lesenswert?

und von Geschwindigkeit her, ist es auch so schnell/langsam wie atof()?

von Karl H. (kbuchegg)


Lesenswert?

Flo wrote:
> und von Geschwindigkeit her, ist es auch so schnell/langsam wie atof()?

Die die Funktion etwas mehr macht als atof, wird sie wohl kaum
schneller sein.
Die eigentliche Arbeit, nämlich das Umwandeln, wird aber wohl
in beiden Funktionen gleich gemacht werden. Also kann man wohl
davon ausgehen, dass sie in etwa gleich schnell sein wird.

von Flo (Gast)


Lesenswert?

die Funktion inkremmentiert wohl nur zusätzlich den (**endptr)-Zeiger.

(**endptr)-Zeiger zeigt nach der Umwandlung auf die Position, bis wohin 
die Umwandlung stattgefunden hat


Danke für eure Hilfe, klappt alles wunderbar :-)

von Rolf Magnus (Gast)


Lesenswert?

>> und von Geschwindigkeit her, ist es auch so schnell/langsam wie
>> atof()?
>
> Die die Funktion etwas mehr macht als atof, wird sie wohl kaum
> schneller sein.

Müßte ich atof() selbst definieren, würde ich es intern einfach strtof() 
aufrufen lassen, wodurch dann letzteres durchaus schneller sein kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.