Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从stringstream读取输入_C++_Stringstream - Fatal编程技术网

C++ 从stringstream读取输入

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字符串。

我正在读取大小为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字符串。

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继承的