Forum: Mikrocontroller und Digitale Elektronik Buffer nach itoa überschreiben


von hownottobeseen (Gast)


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

von Klaus W. (mfgkw)


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.

von Klaus W. (mfgkw)


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)

von hownottobeseen (Gast)


Lesenswert?

Danke euch zwei, ich denke, jetzt komm ich weiter :)

Viele Grüße

hownottobeseen

von hownottobeseen (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.