c_str()
is not allocating new storage. The docs say "The pointer returned may be invalidated by further calls to other member functions that modify the object."
i.e., each time token is reassigned to, the char* you have already stored in your structure are left pointing at nothing.
You need to allocate a new char* string for each of your structure fields when you populate it, and strcpy from token.c_str() to that.