返回的字符串是否从getline()以null结尾?

时间:2012-11-23 01:00:55

标签: c++ string getline

googling一段时间之后我不太确定的一件事是返回的getline()字符串。希望在此确认。

std::getline

此全局版本返回 std :: string ,因此它不一定以null结尾。有些编译器可能附加'\ 0'而其他编译器则不会。

std::istream::getline

此函数返回 c样式字符串,因此可以保证字符串以空值终止。

是吗?

2 个答案:

答案 0 :(得分:4)

空终止是一个仅适用于C字符串的概念;它不适用于std::string的对象 - 它们允许您通过调用size()来查找大小,并且不需要空终止。但是,从std::string的{​​{1}}函数返回的字符串将以空值终止,无论字符串的数据来自何处。

C ++ 11标准描述了第21.4.5.2节中c_str()的先决条件:

  

如果operator [pos],则返回*(begin() + pos)。否则,返回对值为pos < size()的{​​{1}}类型的对象的引用,其中修改对象会导致未定义的行为。

注意charT,而不是charT():标准明确允许pos < size()个对象没有空终止。

答案 1 :(得分:0)

  

在提取数据后,用信号通知c字符串结尾的结束空字符会自动附加到s。