
Can anyone explain to me why the code below prints: Token: A1B21 Token: A1B Token: : Token: 12 Instead of printing: Token: A1B2 Token: : Token: 12 Token: A1B Token: : Token: 12 Using boost 1.31.0 Thanks! ---Cut here--- #include <boost/tokenizer.hpp> #include <iostream> int main() { boost::char_separator<char> sep("", ":", boost::keep_empty_tokens); boost::tokenizer< boost::char_separator<char> > stringTok(std::string("A1B2:12"),sep); boost::tokenizer< boost::char_separator<char> >::iterator tokIter=stringTok.begin(); while(tokIter!=stringTok.end()) { std::cout << "Token: " << (*tokIter) << "\n"; tokIter++; } boost::tokenizer< boost::char_separator<char> > stringTok2(std::string("A1B:12"),sep); boost::tokenizer< boost::char_separator<char> >::iterator tokIter2=stringTok2.begin(); while(tokIter2!=stringTok2.end()) { std::cout << "Token: " << (*tokIter2) << "\n"; tokIter2++; } } ---Cut Here--- -- Thomas Johnson <thomas@unifiedconsulting.com>

On Sat, 21 Feb 2004 03:31:49 -0800, Thomas Johnson wrote:
boost::tokenizer< boost::char_separator<char> > stringTok(std::string("A1B2:12"),sep);
you have undefined behaviour here. Tokenizer does not store copy of string it was initialized with, it only stores its iterators. These iterators are invalid when above expression is evaluated, because string you used to initialize tokenizer was temporary variable. B. -- Popieram program obniżenia podatków: www.odpowiedzialnosc.org
participants (2)
-
Bronek Kozicki
-
Thomas Johnson