当我把一些东西放到一个字符串流中,假设是一个实数,如果我把这个字符串流对象插入到cout...what中,我看到的是吗?
通常我会得到一些奇怪的数字。这是一个内存位置吗?只是好奇而已。
它看起来像是下面的评论击中了它,但这是我试图做的:
string stringIn;
stringstream holdBuff;
holdBuff << getline(cin, stringIn);
cout << holdBuff; 基本上,我只是想看看我插入stringIn后holdBuff是什么样子的。我试图让用户输入一个字符串,然后我想逐步通过它,寻找它的内容,并可能转换…
发布于 2012-01-11 18:24:45
你怎么认为
holdBuff << getline(cin, stringIn);正在做什么。在本例中,getline的返回类型是对正在读取的流(cin)的引用。因为没有定义将std::istream作为第二个参数的<<,所以编译器尝试不同的转换:在C++11中,std::istream隐式转换为bool,在早期的C++中,隐式转换为std::ios*或类似的转换(但返回值的唯一有效用途是将其转换为bool)。因此,您要么输出1 (C++11),要么输出一些随机地址(实际上,通常是流的地址,但这是不能保证的)。如果您想将调用getline的结果放入std::ostringstream中,则需要两个操作(并检查它们之间是否存在错误):
if ( !getline( std::cin, stringIn ) )
// Error handling here...
holdBuff << stringIn;类似地,要编写std::ostringstream的内容,
std::cout << holdBuf.str() ;才是正确的解决方案。如果您坚持在std::ostringstream更合适的情况下使用std::stringstream,您还可以这样做:
std::cout << holdBuf.rdbuf();然而,第一种解决方案更可取,因为它更惯用。
在任何情况下,再一次,没有接受任何iostream类型的<<运算符,因此您最终得到隐式转换为bool或指针的结果。
发布于 2012-01-11 17:24:51
是的,您可能会看到字符串流的地址。
如果想要显示它所包含的字符串,请尝试
cout << stream.str();发布于 2012-01-11 17:24:02
cout << s.rdbuf();就是你想要的。或者,您可能想要
cout << s.str();这在资源方面可能更昂贵。
https://stackoverflow.com/questions/8816817
复制相似问题