在谷歌搜索一段时间后我不太确定的一件事是返回的 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 提取的数据之后。