mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik pointer, printf, unerklärliches Verhalten vom Atmega


Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe eine Funktion mit der ich einen string zerlegen möchte:
void parse () {
  char *pch;
  char *module_cmd = "VAR1:VAR2:BEFEHL:TEST";
  u8 module_ident = 0;

  pch = (char*) memchr (module_cmd, ':', strlen(module_cmd));
  if (NULL != pch) {
  module_ident =   (module_cmd[(pch - module_cmd)+1]^
           module_cmd[(pch - module_cmd)+2]^
           module_cmd[(pch - module_cmd)+3])-1;
  }
  
printf("\r\nAusgabetest1: %s",module_cmd);
  module_cmd = strtok_r(module_cmd,":",&pch);
  module_cmd = strtok_r(NULL,'\0',&pch);  

  module_cmd = strtok_r(module_cmd,":",&pch);
  module_cmd = strtok_r(NULL,'\0',&pch);
  
printf("\r\nAusgabetest1: %s",module_cmd);
}

Beim Ausgabetest1 kommt: VAR1:VAR2:BEFEHL:TEST
Beim Ausgabetest2 kommt: BEFEHL:TEST

Soweit so gut, kommentiere ich die Zeile mit der prontf-Ausgabetest1 
aus, kommt beim Ausgabetest2 nur: <0>

Ich habe festgestellt, dass es nicht unbedingt an den strtok_r 
Funktionen liegt. Wenn ich die Suche nach de, Zeichen ":" nicht mache, 
ist die Ausgabe auch in Ordnung. Irgendwie stehe ich seit ein paar 
Stunden auf dem Schlauch. Sieht jemand vielleicht, was einem sofort ins 
Auge sticht?

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Komischerweise ist es egal, was ich in der ersten printf-Ausgabe mache, 
Hauptsachen ich gebe irgendwas aus.

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gefunden.

Der delimiter sollte null-terminiert sein.

char *strtok_r(char *s1, const char *s2, char **s3);
PARAMETERS
s1
    Points to the string from which to extract tokens.
s2
    Points to a null-terminated set of delimiter characters.
s3
    Is a value-return parameter used by strtok_r() to record its 
progress through s1.

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.