C++ 什么';read、readsome、get和getline之间的区别是什么?
这些功能之间的区别是什么。当我使用它们时,它们都做相同的事情。例如,所有三个调用都返回“hello”: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通过比较将分隔符
#包括
#包括
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
通过比较将分隔符从流中拉出,然后将其删除。它不会添加到它填充的缓冲区中
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;
}