【问题标题】:passing data from byte array(with zeros) to istringstream(stringstream)将数据从字节数组(带零)传递到 istringstream(stringstream)
【发布时间】:2013-11-13 11:10:57
【问题描述】:

为什么是这个代码

char magicData [] = { 0x00i8, 0xfdi8, 0xffi8, 0xfci8, 0x00i8,
                      0xf3i8, 0xf4i8, 0xf5i8, 0x00i8};
std::string s;
std::istringstream ss(magicData, sizeof(magicData));
while(std::getline(ss, s))
{
std::cout << s << std::endl;
}

不产生任何输出? (使用 stringstream 而不是 istringstream 没有帮助)。 结果我希望有 2 行字符串(末尾没有 0x00)。 如何解决?

【问题讨论】:

  • 我认为,您应该检查std::istringstream构造函数的描述以...
  • 什么是magic?你不是说magicData吗?
  • 抱歉,当然是magicData

标签: c++ stringstream istringstream


【解决方案1】:

std::istringstream 没有采用数组的构造函数。您实际上是在调用采用 C 风格字符串和 openmode 的构造函数。要使其工作,您只需要:

std::istringstream ss(std::string(magic, magic + sizeof(magic)));

【讨论】:

  • magicData 不包括 '\0'。您的答案和 OP 示例将产生 UB。
  • 但是...char magicData[] = "line1\n line 2\n";works => istringstream 有这样的构造函数
猜你喜欢
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多