Buffer nach itoa überschreiben

Gast #1275485
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:
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
#1275515
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren