mikrocontroller.net

Forum: Compiler & IDEs Variablen vermischen sich


Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]).

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

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

Autor: Niklas Gürtler (erlkoenig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char* pToken = strtok(uart_buffer, ",");

geht da nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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_fu...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.