itoa terminiert keine Nullen

Gast #128645
Hallo Alle,

ich bins mal wieder.
Ich haben ein 4x20 Display mit der Peter Fleury lib. laufen. Wenn ich
jetzt den Wert einer Variablen auf dem Display ausgeben will sage ich:

lcd_gotoxy(14,0);
itoa(temp1,string1,10);
lcd_puts (string1);

Das Funktioniert ja vom Prinzip auch aber wenn die Zahl von bspw. drei
auf zwei Stellen schrumpft, dann bleibt halt eine parasitäre Null
stehen. Was mache ich falsch?

Vielen Dank schon mal an alle fleißigen Forianer.

Ciao René
Gast #128646
Ich habe zwar nicht genau verstanden, was du meinst. Aber du kannst vor
Anwenden von itoa dein string1 z. B. mit memset auf 0 setzen. Also zum
Beispiel_

unsigned char string1[10];
...
memset(string1,0,10);
itoa(..);
lcd_puts(..);

Thorsten
Gast #128647
Das liegt nicht an itoa, sondern daran, daß - ohne das Display zu
löschen - nacheinander unterschiedlich lange Strings ausgegeben
werden.
Die "Reste" des längsten Strings bleiben so erhalten,

Werden nacheinander die Strings
"Apfelkuchen" und "Birne" ausgegeben, so steht auf dem Display
"Birnekuchen" ...

Abhilfe wäre hier das Auffüllen des Strings auf eine definierte Länge
oder aber das vorherige Ausgeben eines Strings mit der maximal zu
erwartenden Anzahl an Leerzeichen.
Gast #128648
ja, stimmt genau, was rufus sagt, ausserdem ist die itoa() "left
adjusted", also bleiben die "rechten" symbole eines alten strings
aufm display stehen
Gast #128649
Hi @all,

danke für die schnellen Antworten. Welches ist denn die eleganteste
Lösung? Leider bin ich blutiger c Anfänger. Wenn ich so schreibe:

  lcd_gotoxy(14,3);
  memset(string4,0,10);
  itoa(temp4,string4,10);
  lcd_puts(string4);

dann geht es nicht.

Wie würde denn der Code aussehen wenn man den String auf eine
definierte Länge setzt.

Danke und Ciao

René
Gast #128650
ich nochmal...

ich schreibe jetzt als erstes vier Leerzeichen und dan den neuen Wert.
So funktioniert es, aber man sieht es dem Werte an, er steht nämlich
leicht zitterig auf dem Display. Besser wäre eine Lösung  bei der man
nicht den ganzen Wert einmal löschen muss.

Danke im Voraus

René
Gast #128651
Dann bestimme doch die Länge des von itoa erzeugten Strings, rechne aus,
wieviele Leerzeichen fehlen und gib die nach dem Ausgeben des Strings
aus, wenn mehr als 0.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.