www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Buffer nach itoa überschreiben


Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe ein sehr merkwürdiges Problem in Verbindung mit itoa.
Ich möchte eine Zahl mit vorangestelltem Zeichen in einer Funktion 
zurückgeben und verwende dafür folgenden Code:
char* retval = "     ";
itoa(val, retval+1, 10);
retval[0] = (prefix == 1) ? 'A' : 'B';

Das Kuriose ist, dass zwar mein Zahlenwert um ein Zeichen nach rechts 
verschoben wird, allerdings erscheint weder A noch B in dem String.
Setze ich itoa ohne Offset an und packe A/B nach hinten (unter 
Berücksichtigung der Stringterminierung) funktioniert das Ganze.

ich wollte eigentlich darauf verzichten, einen concat auf die Zeichen zu 
machen bzw. jedes Zeichen im String um eine Stelle nach rechts zu 
verschieben - kann mir jemand sagen, woran das liegt und evtl. einen 
Tipp geben, wie ich den Quellcode zum funktionieren überzeugen kann?

Viele Grüße

hownottobeseen

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
retval zeigt auf einen konstanten String, der ohnehin nicht 
überschrieben werden darf.
Dasselbe mit einem Feld variabler char sollte wohl gehen, davon
abgesehen dass dein Feld nur 6 Zeichen lang ist inkl. abschließender 0,
das reicht eventuell nicht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also etwa so:
  int prefix = 1;
  int val = 42;
  char retval[10];
  itoa( val, retval+1, 10 );
  retval[0] = (prefix == 1) ? 'A' : 'B';

Ach so:
"retval" hört sich an wie ein Wert, der zurückgegeben werden soll.
Falls das so ist: dann darf es keine lokale Variable sein (wie hier)!
Entweder static machen, oder vom Aufrufer übergeben lassen
(oder mit malloc allokieren, aber das darf man hier nicht erwähnen)

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch zwei, ich denke, jetzt komm ich weiter :)

Viele Grüße

hownottobeseen

Autor: hownottobeseen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
edit: ich glaub ich seh' schon doppelt, hab leider nicht gesehen, dass 
"nur" Klaus geantwortet hat ;)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
passt schon, ich bin manchmal etwas schizophren.

mfg, Klaus & Klaus (der neulich mit dabei war, die beiden
Gipfel des Kilimandscharo mit einer Brücke zu verbinden)

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.