googling一段时间之后我不太确定的一件事是返回的getline()字符串。希望在此确认。
std::getline
此全局版本返回 std :: string ,因此它不一定以null结尾。有些编译器可能附加'\ 0'而其他编译器则不会。
std::istream::getline
此函数返回 c样式字符串,因此可以保证字符串以空值终止。
是吗?
答案 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。