It appears that strtok() returns a temporary string which loses its correct value after several calls. The manual at https://manual.zorro-project.com/str_.htm points this out for other functions, but not for strtok(). Unless I am mistaken here, would you mind updating the manual?
Did you feed strtok a temporary string? It's better to use your own buffer.
I believe strtok actually modifies the original string that you supply, adding null terminators and pointing to a specific character in your supplied buffer to get substrings.
Thank you for your quick reply, gentlemen -- Andrew, yes, you are right, I did feed strtok() a temporary string. So it was the underlying temporary string that was modified outside of strtok(). All is well!