Problem mit strcat

Gast #177956
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
Gast #177957
> 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?
Gast #177958
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);
}
Gast #177960
> 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);
}

Antwort schreiben

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