в функции, которая получает символ без знака & & без знака длиной обугленного,станд :: соиЬ << stringstream.str() -> c_str() ничего не печатает
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);
}
Результаты:
- WAS: печатает ничего (не думаю, есть указатель на константные .. случай)
- ХОРОШО: печатает данные
- BAD: ничего не печатает
- TEST, assert: выводит, что mystr.size() равен переданному значению без знака.
Я пробовал:
- string.assign (scp.rdbuf());
- memcpy (char, scp.str(), 10);
- различные методы создания/распределения временных символов, строки
Никакой помощи .. он хотел получить зЬй :: COUT «в состоянии станд :: строка, которая содержит данные, (который был выбрал из foo, который был unsigned char, который был пакетными данными).
Угадывание либо оригинала foo не может быть завершено с нулевой отметкой, или проблема в чем-то вроде этого - простенькая, но не может попасть. Какие вещи искать здесь?
(этот код является еще одной попыткой использовать libpcap, просто для печати пакетов на C++-пути, без использования известных оболочек C++, таких как libpcapp).
Как "std :: cout <<" BAD: "<< scp.str()-> c_str() << std :: endl;` even * компиляция * ?? Функция-член `std :: stringstream :: str()` не возвращает указатель. Он возвращает экземпляр `std :: string`. – 2010-12-02 19:56:34
@Charles Salvia, ой. получил ошибку, пытаясь вспомнить все ошибочные попытки пережевывать его. – 2010-12-02 19:59:13
Что такое foo_len? – 2010-12-02 19:59:17