当我把一些东西放进一个字符串流中时,让我们说一个实数,如果我然后将该stringstream对象插入cout ......我在看什么?
通常我会得到一些奇怪的数字.这是一个记忆位置吗?只是好奇.
看起来下面的评论命中了它,但这是我正在尝试做的事情:
string stringIn;
stringstream holdBuff;
holdBuff << getline(cin, stringIn);
cout << holdBuff;
Run Code Online (Sandbox Code Playgroud)
基本上我只是在插入stringIn时试图看看holdBuff是什么样的.我试图让用户输入一个字符串,然后我想逐步查找它的内容,并可能转换...
Jam*_*nze 22
你怎么看
holdBuff << getline(cin, stringIn);
Run Code Online (Sandbox Code Playgroud)
是在做.返回类型getline是cin在这种情况下对read()的流的引用.由于没有<<定义哪个接受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;
Run Code Online (Sandbox Code Playgroud)
同样,要写一个内容std::ostringstream,
std::cout << holdBuf.str() ;
Run Code Online (Sandbox Code Playgroud)
是正确的解决方案.如果您坚持使用std::stringstream
何时std::ostringstream更合适,您还可以:
std::cout << holdBuf.rdbuf();
Run Code Online (Sandbox Code Playgroud)
然而,第一种解决方案是优选的,因为它更加惯用.
在任何情况下,再一次,没有<<运算符采用任何
iostream类型,因此您最终得到隐式转换bool或指针的结果.
Bo *_*son 21
是的,您可能会看到stringstream的地址.
如果要显示其包含的字符串,请尝试
cout << stream.str();
Run Code Online (Sandbox Code Playgroud)
cout << s.rdbuf();
Run Code Online (Sandbox Code Playgroud)
是你想要的。或者你可能想要
cout << s.str();
Run Code Online (Sandbox Code Playgroud)
但这在资源方面可能更昂贵。
是的,它很可能是某种形式或其他形式的记忆位置.很可能它是指向stringstream对象本身的指针.
您可以通过以下方式确认:
std::stringstream ss;
unsigned long long ll = (unsigned long long)&ss;
cout << ll;
Run Code Online (Sandbox Code Playgroud)
也就是说当你想要一个字符串流时,你应该使用str()函数,如下所示:
cout << ss.str();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53534 次 |
| 最近记录: |