我正在读取大小为5的char数组的输入,
stringstream ss;
char a[5];
if (!ss.read(a, 5))
{
// throw exception
}
if (!ss.get(a, 5))
{
// throw exception
}
这两个功能似乎都有效,有什么不同吗?
答案 0 :(得分:7)
答案 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