C++ std::stringstream >> std::string 仅存储第一个条目?

C++ std::stringstream >> std::string only stores first entry?

本文关键字:gt std 第一个 C++ string stringstream 存储      更新时间:2023-10-16

可能重复:
如何强制std::stringstream运算符>gt;读取整个字符串?

我正在尝试将结构转换为字符串,类似于toString()在Java或C++中对对象的工作方式。要做到这一点,我将格式化后的数据写入std::字符串流,然后将其写入std::字符串。

这是我所拥有的:

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",没有其他内容。

这里有什么明显我遗漏的东西吗?

您应该使用stringstream ::str成员获取值,而不是读回字符串:

string p = ss.str();

否则,读取将遵循将空间视为分隔符的常见模式。

如果您想从stringstream中获得std::string,请执行以下操作:

packet = ss.str();

StringStream运算符>>的工作原理与任何其他流运算符>>类似。因此,对于参数字符串(>>到字符串),它将把数据提供给第一个白色字符(空格、新行、文件末尾等)