mikrocontroller.net

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


Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

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

Beispiel:
//(1)richtig
float fl;
char chr[]="1.2345";

fl=atof(chr);


//(2)falsch
float fl;
char chr[]="143s5,z345";

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

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://linux.die.net/man/3/strtof

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

Autor: Flo (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.