我正在读取一个大小为5的字符数组的输入,
stringstream ss;
char a[5];
if (!ss.read(a, 5))
{
// throw exception
}
if (!ss.get(a, 5))
{
// throw exception
}这两个函数似乎都起作用了,有什么区别吗?
发布于 2011-05-20 09:02:17
ss.read将从流中读取5个字节,除非它到达流的末尾。
ss.get将读取4个字节,除非它达到分隔符('\n')或流的末尾。它还将空终止字符串。
发布于 2011-05-20 09:01:24
前者将读取5个字节,只有在遇到EOF时才会提前停止。
后者将读取4个字节(为空终止留出空间),在遇到EOF或'\n'时提前停止。
您想要哪一个取决于您是否打算让a在语义上表现为一个C字符串。
发布于 2011-05-20 09:02:07
http://www.cplusplus.com/reference/iostream/istream/read/ http://www.cplusplus.com/reference/iostream/istream/get/
读取是当您需要数据块时(例如: ss.read( a,2))-这不会将其存储为c字符串,也不会以空值结尾。
Get -从流中提取字符,并将它们作为c字符串存储到从ss开始的数组中。如果也有像'\n‘这样的分隔字符,则执行停止。
https://stackoverflow.com/questions/6066430
复制相似问题