pointer, printf, unerklärliches Verhalten vom Atmega

OP Persönliche Seite #950302
Ich habe eine Funktion mit der ich einen string zerlegen möchte:
1
void parse () {
2
  char *pch;
3
  char *module_cmd = "VAR1:VAR2:BEFEHL:TEST";
4
  u8 module_ident = 0;
5

6
  pch = (char*) memchr (module_cmd, ':', strlen(module_cmd));
7
  if (NULL != pch) {
8
  module_ident =   (module_cmd[(pch - module_cmd)+1]^
9
           module_cmd[(pch - module_cmd)+2]^
10
           module_cmd[(pch - module_cmd)+3])-1;
11
  }
12
  
13
printf("\r\nAusgabetest1: %s",module_cmd);
14
  module_cmd = strtok_r(module_cmd,":",&pch);
15
  module_cmd = strtok_r(NULL,'\0',&pch);  
16

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

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?
OP Persönliche Seite #950365
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

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