dans une fonction, qui obtient unsigned char & & longueur unsigned char,std :: Cout << stringstream.str() -> c_str() imprime rien
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 from foo.
std::stringstream scp;
for (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);
}
Résultats:
- ÉTAIT: rien imprime (devinez il est un pointeur sur const .. cas)
- BON: imprime des données
- BAD: imprime rien
- TEST, assert: affiche que mystr.size() est égal à la taille du caractère non signé.
J'ai essayé:
- string.assign (scp.rdbuf());
- memcpy (char, scp.str(), 10);
- différentes méthodes de création/allocation temporaire, cordes caractères
Aucune aide .. il voulait obtenir un std :: Cout « en mesure std :: string qui contient des données, (qui était choisi à partir de foo, qui était carbonisation non signé, qui a été données par paquets).
Deviner soit l'original foo ne peut pas être terminé par zéro, ou le problème est quelque chose comme ceci - simple, mais ne peut pas entrer .. quelles sont les choses à rechercher ici?
(ce code est une autre tentative d'utiliser libpcap, juste pour imprimer des paquets en C++ manière, sans utiliser connu C++ wrappers magiques comme libpcapp).
Comment est 'std :: cout <<" BAD: "<< scp.str()-> c_str() << std :: endl;' même * compiler * ?? La fonction membre 'std :: stringstream :: str()' ne renvoie pas de pointeur. Il renvoie une instance de 'std :: string'. –
@Charles Salvia, aïe. J'ai eu un faux-semblant en essayant de me souvenir de toutes les tentatives erronées pour le mâcher. –
Qu'est-ce que foo_len? –