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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jens Jørgensen (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


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


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


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


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


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

: Bearbeitet durch User

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]
  • [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.