mit Strings arbeiten

Gast #129234
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
"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
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

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