getline和get一样吗?

时间:2015-07-06 16:15:09

标签: c++

好的,我的问题很简单..

我们都知道getsC中的fgets有多糟糕因此建议使用C++

现在在std::string s我们使用std::getline(std::cin, s)char input[100]。现在我的问题是getline()是否具有与gets()相同的边界检查问题。

如果是,那么cin.getline(input,sizeof(input));& std::string s;将用于char数组但是使用string时可以写这个吗?

cin.getline(s, s.capacity());& callback ...这是合适的还是我能写的其他东西?

2 个答案:

答案 0 :(得分:5)

不,getline与[{1}}没有相同的问题。该函数具有对字符串的引用,因此可以调用字符串&n; getssize成员函数以进行边界检查。但是,它并不需要这样做,因为它还可以访问字符串的大小调整成员函数,例如capacitypush_backresize,这将自动处理边界检查,必要时重新分配。

答案 1 :(得分:0)

get()将分隔符留在队列中,这样您就可以将其视为下一个输入的一部分。 getline()丢弃它,所以下一个输入就在它之后。

如果你正在谈论控制台输入中的换行符,丢弃它是非常有意义的,但是如果我们考虑来自文件的输入,你可以使用" delimiter"下一个字段的开头。