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
Post a Comment