strtok_r funktioniert nicht

Gast #177903
Lesenswert?
• ▲
▼
Hallo,

ich versuche einen string zu parsen, leider jedoch ohne Erfolg. Der
Code ist angehängt.
Der erste Teil ($GPGLL) wird korrekt abgeschnitten und der Pointer
dummie zeigt auch darauf. Doch die weiteren Pointer zeigen irgendwohin,
nur nicht auf den string.

Laut Doku sollte diese Funktion aber schon so irgendwie funktionieren:

"strtok_r parses the string s into tokens. The first call to strtok_r
should have string as its first argument. Subsequent calls should have
the first argument set to NULL. If a token ends with a delimiter, this
delimiting character is overwritten with a '\0' and a pointer to the
next character is saved for the next call to strtok_r. The delimiter
string delim may be different for each call. last is a user allocated
char* pointer. It must be the same while parsing the same string.
strtok_r is a reentrant version of strtok(). The strtok_r() function
returns a pointer to the next token or NULL when no more tokens are
found."

Kann mir irgendwer sagen warum das nicht geht?!?


Vielen Dank
Angehängte Dateien:
Gast #177904
Lesenswert?
• ▲
▼
Null problemo hier:

(gdb) targ rem :1212
Remote debugging using :1212
0x00000000 in __vectors ()
(gdb) load
Loading section .data, size 0x32 lma 0x1c6
Loading section .text, size 0x1c6 lma 0x0
Start address 0x0, load size 504
Transfer rate: 4032 bits in <1 sec, 31 bytes/write.
(gdb) b main
Breakpoint 1 at 0xd2: file foo.c, line 17.
(gdb) c
Continuing.

Breakpoint 1, main () at foo.c:17
(gdb) n
(gdb) p dummie
$1 = 0x800100 "$GPGLL"
(gdb) p data
$2 = 0x800100 "$GPGLL"
(gdb) p savept
$3 = 0x800107 "4700.2475,N,800.3416,W,161229.487,A*2C"
(gdb) n
(gdb) p st_latitude
$4 = 0x800107 "4700.2475"
(gdb) n
(gdb) p N_S
$5 = 0x800111 "N"
(gdb) n
(gdb) p st_longitude
$6 = 0x800113 "800.3416"
(gdb) n
(gdb) p O_W
$7 = 0x80011c "W"
Gast #177906
Lesenswert?
• ▲
▼
Hallo Jörg,

vielen Dank für Deine Antwort. Sorry, dass ich nicht angegeben habe mit
welchem System ich arbeite. Bei Dir scheints ja wirklich zu
funktionieren.
Ich verwende einen ATMEGA32. Compilieren tut es auch ohne Probleme,
aber ich erhalte leider nicht die erwarteten Strings zurück.

Bisher habe ich nicht herausgefunden, wie ich mit einem ATMEGA32
debuggen kann. Sehe ich das richtig, dass Du einen Simulator einsetzt?
Gibt es sowas auch für Windows?


Vielen Dank und Gruss     Reto
Gast #177907
Lesenswert?
• ▲
▼
> Sehe ich das richtig, dass Du einen Simulator einsetzt?

Ja.

> Gibt es sowas auch für Windows?

Ich habe hier einfach simulavr verwendet.  Ja, gibt's auch für
Windows, ist bei WinAVR mit dabei.  Ansonsten hast Du ja unter Windows
auch AVR Studio als Simulator sowie (gegen Entgeld) VMLAB.
Gast #177908
Lesenswert?
• ▲
▼
... bei WinAVR ist das dabei?!? Ich hab damit bis jetzt nur compiliert
und geladen. Kann mir jemand eine kurze Anleitung geben wie ich damit
debuggen kann? Ich find das irgendwie nicht raus... Der muss die object
files haben, oder?

Und wie geht das mit dem AVR Studio? Ich hab das eben am Anfang gleich
zur Seite gelegt, da man dort nur Assembler Code verarbeiten kann. Das
muss ja irgendwie auch die object files kriegen. Doch wenn ich die
öffne erscheinen nur kryptische Zeichen...


Vielen Dank
Gast #177909
Lesenswert?
• ▲
▼
$ simulavr -g -d atmega128
  $ avr-insight foo.elf

Im insight dann im Menü "Run->Connect to target"

Target: Remote/TCP
Hostname: localhost
Port: 1212

"OK"
"Run->Download"

Sieht ganz nett aus...

Oder halt

  $ make all extcoff

Und die foo.cof im AVRStudio öffnen.

Antwort schreiben

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.

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.