2012-09-07 31 views
2

可能重複:
How to force std::stringstream operator >> to read an entire string?C++ std :: stringstream >> std :: string只存儲第一個條目?

我想一個結構轉換爲字符串,類似於如何的toString()將工作在Java或C對象++。爲此,我將格式化的數據寫入std :: stringstream,然後將其寫入std :: string。

以下是我有:

std::stringstream ss; 
std::string  packet; 

ss << "Packet Length: " << p->header->len 
    << " (" << p->header->caplen << ")" << std::endl 
    << "Collected: " << timedate << "." 
    << std::dec << p->header->ts_usecs << std::endl 
    << "Eth:\tFrom: " << to_address(p->from) << std::endl 
    <<  "\tTo: " << to_address(p->to) << std::endl 
    <<  "\tType: " << to_hex(p->type, false) 
    << " (" << p->type_name << ")" << std::endl; 

但由於某些原因,當我寫這篇文章的流進的std :: string包:

ss >> packet; 

,然後打印包的值:

cout << "Packet X " << packet << endl; 

我只看到文字"Packet",沒有別的。

有什麼明顯的我在這裏失蹤?

+1

@BoPersson我的問題是更多關於爲什麼我沒有得到完整的字符串。如果我知道'''沒有讀完整串我不會問。 –

回答

8

而不是讀一個字符串返回,你應該使用stringstream ::str成員獲得的價值:

string p = ss.str(); 

否則,閱讀遵循將空間視爲分隔符的通常模式。

+0

謝謝,我知道這件事很簡單。我一直使用'>>'操作符將所有其他數據加載到字符串中,我猜他們恰好沒有空格。 –

3

如果你想獲得std::stringstringstream的,你這樣做:

packet = ss.str(); 
+0

謝謝,我知道這很簡單。我一直使用'>>'操作符將所有其他數據加載到字符串中,我猜他們恰好沒有空格。 –

0

StringStream運算符>>像任何其他流運算符>>一樣工作。 因此,對於參數字符串(>>到字符串)它會給第一個白色字符(空格,新行,文件結束等)數據

相關問題