Forum: Compiler & IDEs Problem mit strcat


von Deramon (Gast)


Lesenswert?

Hallo,
ich habe da ein kleines Problem mit strcat. Bei dem 2. strcat Befehl
macht der MC einen Reset. Kann mir jemand sagen warum das so nicht
funktioniert ? Aus uint8_t x soll der string "04" werden. (Aktuelle
avr-gcc version)


char *strtmp = "";
char *strtmp2 = "";
uint8_t x = 4;

itoa(x,strtmp2,10);
if(x < 10)
{
  strcat(strtmp, "0");
  strcat(strtmp,strtmp2);
}



MfG
Deramon

von Jörg Wunsch (Gast)


Lesenswert?

> Kann mir jemand sagen warum das so nicht funktioniert?

Weil Du Dir die Grundlagen von C erst nochmal rekapitulieren mußt. ;-)

Sowohl für strtmp als auch für strtmp2 hast Du exakt je 1 Byte an
Speicherplatz reserviert, der für die terminierende '\0' belegt
wird.
Wie willst Du da noch weitere Zeichen reinschreiben können?

von Deramon (Gast)


Lesenswert?

Hm.. ja, das mit den Pointern ist noch so ne Sache :)
Folgender Code funktioniert und bei meinem LCD wird "04" angezeigt,
wenn ich strtmp ausgeben.
Da nur ein Byte reserviert ist, kann es mir dann also passieren das ich
einen für eine andere variable reservierten Bereich überschreibe und das
zum Reset im 1. Beispiel geführt hat ?


char *strtmp = "";
uint8_t x = 4;

itoa(x,strtmp,10);
if(x < 10)
{
  strcat(strtmp, "0");
  strtmp = strrev(strtmp);
}

von Jörg Wunsch (Gast)


Lesenswert?

Es kann nicht nur passieren -- es wird passieren.

von Jörg Wunsch (Gast)


Lesenswert?

> das mit den Pointern ist noch so ne Sache :)

Grundregel #1: vergewissere Dich, wohin der Zeiger eigentlich zeigt.
Ein Zeiger muß auf ein gültiges Objekt zeigen, also auf irgendwas, das
den von Dir benötigten Speicherplatz in ausreichender Menge besitzt.

#2: warum nimmst Du dann überhaupt Zeiger?  Sie sind völlig
überflüssig in dieser Situation.

char strtmp[8] = {0};
char strtmp2[8];

uint8_t x = 4;

itoa(x,strtmp2,10);
if(x < 10)
{
  strcat(strtmp, "0");
  strcat(strtmp,strtmp2);
}

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.