Buffer nach itoa überschreiben

Gast #1275485
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:
1
char* retval = "     ";
2
itoa(val, retval+1, 10);
3
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
#1275496
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.
#1275515
Also etwa so:
1
  int prefix = 1;
2
  int val = 42;
3
  char retval[10];
4
  itoa( val, retval+1, 10 );
5
  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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.