从stringstream读取输入

时间:2011-05-20 00:54:44

标签: c++ stringstream

我正在读取大小为5的char数组的输入,

stringstream ss;

char a[5];

if (!ss.read(a, 5))
{
    // throw exception
}

if (!ss.get(a, 5))
{
   // throw exception
}

这两个功能似乎都有效,有什么不同吗?

4 个答案:

答案 0 :(得分:7)

ss.read将从流中读取5个字节,除非它到达流的末尾。

ss.get将读取4个字节,除非它到达分隔符('\ n')或流的末尾。它也将null终止字符串。

答案 1 :(得分:3)

前者将读取5个字节,仅在遇到EOF时提前停止。

后者将读取 4 字节(允许空终止空间),在遇到'\n'时遇到EOF 时提前停止。

您想要哪一个取决于您是否打算让a在语义上表现为C字符串。

答案 2 :(得分:3)

http://www.cplusplus.com/reference/iostream/istream/read/ http://www.cplusplus.com/reference/iostream/istream/get/

读取是指您需要数据块时(例如:ss.read(a,2)) - 这不会将其存储为c-string而不是以null结尾。

Get - 从流中提取字符并将它们作为c字符串存储到从ss开始的数组中。如果存在像'\ n'这样的分隔字符,则执行停止。

答案 3 :(得分:1)

ss.get为您提供了无格式数据,ss.read为您提供了一个块,都是从istream继承的link