Forum: Mikrocontroller und Digitale Elektronik C char array Manipulation für atoi


von Jens Jørgensen (Gast)


Lesenswert?

Hallo,

ich bekomme über Serial periodisch eine Char Array mit unterschiedlicher 
Länge.

Zum Beispiel: "-123" oder "34345".

Diese Zahl speichere ich in einer Char Array mit einer festen Länge.
1
char ch[10];

Ich möchte die Länge der Char Array bei der Laufzeit nicht ändern. Daher 
wird es fest initialisiert.

Nun frage ich mich wie wandle ich sie in Integer mittels atoi um?

atoi gibt mir immer 0 zurück, wenn die char Länge nicht mit der 
tatsächlichen empfangen char übereinstimmt.

Vielen Dank im Voraus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jens Jørgensen schrieb:
> atoi gibt mir immer 0 zurück, wenn die char Länge nicht mit der
> tatsächlichen empfangen char übereinstimmt.

Mit Sicherheit nicht. Da passiert was anderes.

Gib mal den Inhalt Deines Arrays zeichenweise aus.

von Dirk B. (dirkb2)


Lesenswert?

atoi wandelt bis zum ersten Zeichen, dass nicht zu einem Integer passt.
Also (abgesehen vom Vorzeichen) keine Ziffer ist.

Wie sieht dein Aufruf aus?

Es gibt im Standard auch noch die Funktion strtol

: Bearbeitet durch User
Beitrag #5117199 wurde vom Autor gelöscht.
von Jens Jørgensen (Gast)


Lesenswert?

es klappt jetzt, wenn ich den Inhalt von ch alles mit Integer 0 fülle 
und dann die entsprechende chars zuweise.

von Peter D. (peda)


Lesenswert?

Jens Jørgensen schrieb:
> es klappt jetzt, wenn ich den Inhalt von ch alles mit Integer 0 fülle
> und dann die entsprechende chars zuweise.

Es gibt nichts schlimmeres, als Code in Prosa zu posten.
Ich verstehe nur Bahnhof.
Was ist denn so schwer an Ctrl-V, Ctrl-C?

von Stefan F. (Gast)


Lesenswert?

Dein Problem ist nur die Folge eines früheren Fehlers.

Strings sind immer null terminiert. Wenn du das abschließende null 
Zeichen nicht mit ins Array geschrieben hast, hast du schon im Vorfeld 
den String kaputt gemacht.

> wenn ich den Inhalt von ch alles mit Integer 0 fülle

Sicher funktioniert das als Workaround, aber es ist keine saubere 
Lösung. Würdest du das auch mit Strings machen, die mehrere Megabytes 
lang werden dürfen? Sicher nicht.

Jede Funktion, die Strings verarbeitet, schließt entweder auch das 
terminierende null Zeichen ein oder liefert die Länge des Strings. Diese 
Längenangabe kann man verwenden, um gezielt ein einziges null an die 
richtige Stelle zu schreiben.

> Was ist denn so schwer an Ctrl-V, Ctrl-C?

Das ist bestimmt wieder ganz geheim. Ich musste letzte Jahr mal eine 
Geheimhaltungsklausel erenut unterschrieben, weil es dem Auftraggeber 
super wichtig war, daß das 400 Byte kleine Programm niemand zu sehen 
bekommt. So ein Bohei, als ob man damit die Welt erobern könnte.

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.