C++ 从stringstream读取输入
我正在读取大小为5的字符数组的输入C++ 从stringstream读取输入,c++,stringstream,C++,Stringstream,我正在读取大小为5的字符数组的输入 stringstream ss; char a[5]; if (!ss.read(a, 5)) { // throw exception } if (!ss.get(a, 5)) { // throw exception } 这两个函数似乎都能工作,有什么区别吗?前者将读取5个字节,只有遇到EOF时才会提前停止 后者将读取4个字节(允许空终止),在遇到EOF或遇到'\n'时提前停止 您想要哪一个取决于您是否希望a在语义上表现为C字符串。
stringstream ss;
char a[5];
if (!ss.read(a, 5))
{
// throw exception
}
if (!ss.get(a, 5))
{
// throw exception
}
这两个函数似乎都能工作,有什么区别吗?前者将读取5个字节,只有遇到EOF时才会提前停止 后者将读取4个字节(允许空终止),在遇到EOF或遇到
'\n'
时提前停止
您想要哪一个取决于您是否希望a在语义上表现为C字符串。
http://www.cplusplus.com/reference/iostream/istream/get/
Read是指当您需要数据块时(例如:ss.Read(a,2))-这不会将其存储为c字符串,也不会以null结尾
Get-从流中提取字符,并将其作为c字符串存储到从ss开始的数组中。如果存在诸如“\n”之类的定界字符,执行将停止。将从流中读取5个字节,除非它到达流的末尾
将读取4个字节,除非它命中分隔符(“\n”)或流的结尾。它还将以null结尾字符串。ss.get为您提供未匹配的数据,ss.read为您提供一个块,两者都是从istream继承的