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


von A. F. (artur-f) Benutzerseite


Lesenswert?

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?

von A. F. (artur-f) Benutzerseite


Lesenswert?

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

von A. F. (artur-f) Benutzerseite


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.

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.