Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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++ 什么';read、readsome、get和getline之间的区别是什么?_C++ - Fatal编程技术网

C++ 什么';read、readsome、get和getline之间的区别是什么?

C++ 什么';read、readsome、get和getline之间的区别是什么?,c++,C++,这些功能之间的区别是什么。当我使用它们时,它们都做相同的事情。例如,所有三个调用都返回“hello”: #包括 #包括 int main() { stringstream ss(“你好”); char x[10]={0}; 读(x,sizeof(x));/#1 当使用参数调用get时,std::coutget和getline非常相似(char\u type*s,std::streamsize count)。但是,get从流中读取,直到找到分隔符,然后将其保留在那里。getline通过比较将分隔符

这些功能之间的区别是什么。当我使用它们时,它们都做相同的事情。例如,所有三个调用都返回“hello”:

#包括
#包括
int main()
{
stringstream ss(“你好”);
char x[10]={0};
读(x,sizeof(x));/#1

当使用参数
调用
get
时,std::cout
get
getline
非常相似(char\u type*s,std::streamsize count)
。但是,
get
从流中读取,直到找到分隔符,然后将其保留在那里。
getline
通过比较将分隔符从流中拉出,然后将其删除。它不会添加到它填充的缓冲区中

get
查找
\n
,当参数中提供了特定数量的字符时(例如,
count
),它将在停止前读取最多
count-1
个字符。
read
将提取所有
count
个字符

您可以将
read
视为二进制数据源上的一个适当操作,读取特定数量的字节。
get
更适合于文本流,当您读入希望以null结尾的字符串时,以及诸如换行符之类的内容具有有用的语法意义,可以拆分文本


readsome
只返回在底层缓冲区中立即可用的字符,这有点模糊,并且是特定于实现的。例如,这可能包括使用
putback
返回到流中的字符。事实上,您看不到
read
rea之间的区别dsome
只是显示了这两个函数可能在您使用的特定流类型和库上共享一个实现。

我观察到了flash归档系统上的
read()
readsome()
之间的差异


底层流读取8k块,而
read
方法将用于下一个块以满足调用者,而
readsome
方法被允许返回小于请求的值,以避免花费时间获取下一个块。

get()和getline()之间的主要区别是get()将换行符保留在输入流中,使其成为下一个输入操作看到的第一个字符,而getline()则从输入流中提取并丢弃换行符。

read@BryanChen我有,但我仍然不理解其中的区别。
#include <iostream>
#include <sstream>

int main()
{
    stringstream ss("hello");
    char x[10] = {0};
    ss.read(x, sizeof(x));          // #1
    std::cout << x << std::endl;
    ss.clear();
    ss.seekg(0, ss.beg);
    ss.readsome(x, sizeof(x));      // #2
    std::cout << x << std::endl;
    ss.clear();
    ss.seekg(0, ss.beg);
    ss.get(x, sizeof(x));           // #3
    std::cout << x;
    ss.clear();
    ss.seekg(0, ss.beg);
    ss.getline(x, sizeof(x));       // #4
    std::cout << x << std:endl;
}