c++ - std::cout << stringstream.str()->c_str() prints nothing -


in function, gets unsigned char && unsigned char length,

void pcap_callback(u_char *args, const struct pcap_pkthdr* pkthdr, const u_char* packet)  {     std::vector<unsigned char> vec(packet, packet+pkthdr->len); // optimized foo.     std::stringstream scp;     (int i=0;i<pkthdr->len;i++) {         scp<<vec[i];     }     std::string mystr =  std::string(scp.rdbuf()->str());     std::cout << "was: " << packet << std::endl;     std::cout << "good: " << scp.str() << std::endl;     std::cout << "bad: "  << scp.str().c_str() << std::endl;     std::cout << "test: " << mystr.size() << std::endl;     assert(mystr.size() == pkthdr->len);  } 

results:

  • was: prints nothing (guess there pointer const.. case)
  • good: prints data
  • bad: prints nothing
  • test, assert: prints mystr.size() equal passed unsigned char size.

i tried:

  • string.assign(scp.rdbuf());
  • memcpy(char, scp.str(), 10);
  • different methods of creating/allocating temporary chars, strings

no help.. wanted std::cout'able std::string contains data, (which picked foo, unsigned char, packet data).

guessing either original foo may not null-terminated, or problem - simple, can't in.. things here?

(this code attempt use libpcap, print packets in c++ way, without using known c++ magic wrappers libpcapp).

for quick test, throw in check scp.str().size() == strlen(scp.str().c_str()) see if there embedded '\0' characters in string, suspect happening.


Comments

Popular posts from this blog

400 Bad Request on Apache/PHP AddHandler wrapper -

Add email recipient to all new Trac tickets -

php - Change action and image src url's with jQuery -