6

しばらくグーグルで調べた後、よくわからないことの1つは、getline()の返された文字列です。ここで確認していただければ幸いです。

std::getline

このグローバル バージョンはstd::stringを返すため、必ずしも null で終了するとは限りません。'\0' を追加するコンパイラもあれば、追加しないコンパイラもあります。

std::istream::getline

この関数はC スタイルの文字列を返すため、文字列が null で終了することが保証されます。

そうですか?

4

2 に答える 2

4

ヌル終了は、C 文字列にのみ適用される概念です。のオブジェクトには適用されませんstd::string- を呼び出すことでサイズを見つけることができ、size()null 終了は必要ありません。ただし、std::stringc_str()関数から返される文字列は、文字列のデータがどこから来たかに関係なく、null で終了します。

C++11 標準operator [pos]では、セクション 21.4.5.2 での前提条件について説明しています。

戻り値:の*(begin() + pos)場合pos < size()charTそれ以外の場合は、 value を持つ型のオブジェクトへの参照を返します。オブジェクトをcharT()変更すると、未定義の動作が発生します。

pos < size()とは対照的に、 に注意してくださいpos <= size()。標準では、std::stringオブジェクトが null 終端を持たないように明示的に許可しています。

于 2012-11-23T01:10:04.360 に答える
0

c-string の終わりを示す終了ヌル文字は、データが抽出された後に s に自動的に追加されます。

于 2012-11-23T01:03:11.653 に答える