mit Strings arbeiten

Gast #129234
Lesenswert?

hallo Leute,

ich versuche seit einigen Tagen meine allgemeinen C Kenntnisse auf die
Mikrokontroller Programmierung anzuwenden stecke aber
im Moment etwas fest.
Mir geht es drum Zeichen, die ich über den uart zugeschickt bekomme auf
dem AVR auszuwerten. Sprich ich will die empfangenen Zeichen
zusammensetzen und dann aus diesen Strings Befehle,Parameter,...
rausfischen.

die Einzelzeichen empfang ich schon wunderbar.
Probleme bereitet mir im Moment das Zusammenfügen.


unsigned int c;    // in dieser Variable erhalte ich mein zeichen von 
dem
PC
char buffer[10];

strcpy (buffer,"");

c = uart_getc();

switch (c)
{
  case '(': uart_putc ('S'); break;
  case ')': uart_putc ('E'); break;
  default:{ strcat (buffer, (unsigned char) c); uart_puts (buffer);
break;}
}


mir ist klar, das das ganze noch ziemlich am Anfang steht und so wohl
noch längere Zeit nicht funktioniert. Mir gehts im Moment nur
um den Ausdruck mit strcat. Da bekomme ich nämlich folgendes warning:

warning: passing arg 2 of `strcat' makes pointer from integer without
a cast

und am ende funktioniert gar nichts.

Nils
Gast #129236
Lesenswert?

"unsigned int c" sollte, wie schon oben beschrieben "unsigned char
c" sein.

"strcat (buffer, (unsigned char) c)" ist auch falsch. strcat()
verkettet strings und keine einzelnen Zeichen.

Den ganzen strcpy() und strcat() sollte man weglassen. Hier
verarbeitest Du ja nirgends wirklich Strings. Also:

strcpy (buffer,""); ->

weglassen

und

strcat (buffer, (unsigned char) c); ->

unsigned char pos = 0; (oder int)

buffer[pos] = c;
pos++;
buffer[pos] = '\0';

Und vor allem noch überprüfen, ob der Puffer nicht überläuft.

Es scheitert also eher weniger an der Mikrocontrollertechnik, sondern
vielmehr an den allgemeinen C-Kenntnissen. ;)
Gast #129237
Lesenswert?

Bei der Definition von buffer evtl. noch initialisieren, wenn es sich um
ein Stack-Array handelt (also temporäre Variable innerhalb einer
Funktion).

char buffer[10] = { '\0' };

oder

char buffer[10];

buffer[0] = '\0';

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