在谷歌搜索一段时间后我不太确定的一件事是返回的 getline() 字符串。希望在这里得到确认。
std::getline
这个全局版本返回一个std::string所以它不一定是空终止的。一些编译器可能会附加一个 '\0' 而其他编译器不会。
std::istream::getline
此函数返回一个c 风格的字符串,因此可以保证该字符串以空值结尾。
是对的吗?
空终止是一个仅适用于 C 字符串的概念;它不适用于std::string- 它们让您通过调用找到大小的对象size(),并且不需要空终止。但是,无论字符串的数据来自何处,从std::string的c_str()函数返回的字符串都是以空值结尾的。
C++11 标准operator [pos]在第 21.4.5.2 节中描述了先决条件:
返回:
*(begin() + pos)如果pos < size()。否则,返回对charT具有 value类型的对象的引用charT(),其中修改对象会导致未定义的行为。
注意pos < size(), 而不是pos <= size(): 该标准明确允许std::string对象不具有空终止。
表示 c 字符串结束的结束空字符会自动附加到 s 提取的数据之后。