Forum: Mikrocontroller und Digitale Elektronik atoi() funktioniert; atof() -->FEHLER


von Jonny (Gast)


Lesenswert?

Hallo alle zusammen!

Über eine Tastatur gebe ich Werte an ein LCD aus.
Jeder Tastendruck (eigentlich der Wert) wird in den String
"zeichen_kette" abgespeichert. Nach drücken von '#', quasi ENTER,
habe ich also z.B folgenden String:

zeichen_kette[] = "123.254"

Da ich mit dem Wert von zeichen_kette noch weitere Rechenoperationen
durchführen muss, habe ich versucht den String mit atof() umzuwandeln.

float komma_zahl;
komma_zahl = atof(zeichen_kette);

Folgende Fehlermeldung habe ich erhalten: "Undefined external "atof"
referred in xxx.c [pfadangabe wo sich xxx.c befindet]"

Als Test habe ich dann anstatt atof() atoi() verwendet. Das hat
funktioniert. Für obigen Beispielstring war das Ergebnis: "123"!

Aufgrund der Genauigkeitsanforderung brauche ich aber die
Nachkommastellen.

Warum funktioniert atoi(), aber atof() nicht?
Kann mir da bitte jemand weiterhelfen!?
Schöne Grüße
Jonny

von Berthold Benning (Gast)


Angehängte Dateien:

Lesenswert?

wenn atof() nicht zu finden ist dann siehe Anhang.
MfG.

von Rufus T. Firefly (Gast)


Lesenswert?

Ob bei Jonny atof() "funktioniert" oder nicht, ist aus der Schilderung
so erstmal nicht zu entnehmen. Offensichtlich ist dem Compiler an der
Stelle keine Deklaration von atof() bekannt - also ist die
entsprechende Headerdatei nicht eingebunden.

Üblicherweise müssen math.h und stdlib.h eingebunden werden, damit
atof() deklariert ist; für atoi() genügt stdlib.h.

Der Hinweis von Berthold ist nur dann erforderlich, wenn atof() in
keiner der zum Compiler gehörenden Headerdateien deklariert ist (und
auch nicht in der Standardlibrary vorhanden ist), was aber ein sehr
eigenartiger C-Compiler sein müsste.

von Jonny (Gast)


Lesenswert?

Vielen Dank - jetzt funktioniert es!

Verstehen tue ich's zwar trotzdem nicht warum atoi funktioniert und
atof nicht, aber wie gesagt, vielen Dank!

Servus
Jonny

von Jonny (Gast)


Lesenswert?

@ Rufus

Also stdlib.h ist als Header eingefügt. Auch habe ich math.h eingefügt,
hat aber nicht zum Erfolg geführt.

Auf deinen Hinweis hin habe ich einmal stdlib.h geöffnet.
Da finde ich folgende Zeilen:
.
.
.
__INTRINSIC MEMORY_ATTRIBUTE int  atoi(const char *);

__INTRINSIC MEMORY_ATTRIBUTE long atol(const char *);

__INTRINSIC MEMORY_ATTRIBUTE double atof(const char *);
.
.
.

Also müsste das doch funktionieren, oder nicht?

Hier mal meine Variablen-Deklaration:
int z;
int button;
char zeichen_kette[17];
double komma_zahl;

Hier der Funktionsaufruf:
zeichen_kette[z] = button;



Kann mir bitte jemand weiter helfen!?

Vielen Dank für eure Hilfe!
Jonny

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.