6

在谷歌搜索一段时间后我不太确定的一件事是返回的 getline() 字符串。希望在这里得到确认。

std::getline

这个全局版本返回一个std::string所以它不一定是空终止的。一些编译器可能会附加一个 '\0' 而其他编译器不会。

std::istream::getline

此函数返回一个c 风格的字符串,因此可以保证该字符串以空值结尾。

是对的吗?

4

2 回答 2

4

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

C++11 标准operator [pos]在第 21.4.5.2 节中描述了先决条件:

返回:*(begin() + pos)如果pos < size()。否则,返回对charT具有 value类型的对象的引用charT(),其中修改对象会导致未定义的行为。

注意pos < size(), 而不是pos <= size(): 该标准明确允许std::string对象不具有空终止。

于 2012-11-23T01:10:04.360 回答
0

表示 c 字符串结束的结束空字符会自动附加到 s 提取的数据之后。

于 2012-11-23T01:03:11.653 回答