Forum: Compiler & IDEs Variablen vermischen sich


von gast (Gast)


Lesenswert?

volatile char latD[1];
volatile char lonD[1];
volatile char course[5]

strncpy(lonD,pToken,1);
myuart_puts(lonD);


Wie kann es hier passieren, dass
ich beim empfangen vom uart 3 zeichen sehe obwohl nur
1 kopiert wurde?
die drei zeichen sind eine mischung aus zwei variablen,
am anfang steht N (Nord, was auch da stehen soll) danach folgen
zwei Zeichen aus einer anderen variable (course{5]).

von Oliver (Gast)


Lesenswert?

myuart_puts(lonD)

wird sehr vermutlich einen String erwarten, und der geht nach 
C-Konvention bis zur nächsten NULL. lonD hat am Ende mit Sicherheit kein 
NULL, da insgesamt nur ein Zeichen lang. Also gibt die Ausgabefunktion 
fröhlich alle folgende Zeichen im Speicher mit aus, bis zur nächsten 
NULL.

Oliver

von gast (Gast)


Lesenswert?

ach so,
wie kann ich hier am einfachsten eine 0 anhaengen?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

1
strncpy(lonD,pToken,1);
Du willst also einen einzigen Buchstaben kopieren. Das geht so 
einfacher:
lonD = pToken;
bzw, falls pToken ein char* ist:
lonD = *pToken;
Und das kopiert immer nur ein Zeichen, also nicht das NULL-Byte.

von gast (Gast)


Lesenswert?

char* pToken = strtok(uart_buffer, ",");

geht da nicht.

von Karl H. (kbuchegg)


Lesenswert?

gast schrieb:
> ach so,
> wie kann ich hier am einfachsten eine 0 anhaengen?

Dein Problem ist ein Anderes.

Ein String der nur aus einem Zeichen besteht, benötigt ein Array der 
Länge 2.

http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F

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.