しばらくグーグルで調べた後、よくわからないことの1つは、getline()の返された文字列です。ここで確認していただければ幸いです。
std::getline
このグローバル バージョンはstd::stringを返すため、必ずしも null で終了するとは限りません。'\0' を追加するコンパイラもあれば、追加しないコンパイラもあります。
std::istream::getline
この関数はC スタイルの文字列を返すため、文字列が null で終了することが保証されます。
そうですか?