生のナル終端文字列を使わずに済ませられるか?

先日書いたように、C++のさわりだけを学習するのであれば、ナル終端文字列を使わずにstd::stringで代用できそうです。
では、std::stringでどこまで済ませることができるでしょうか?
今回はそれを考察してみることにします。

まず、今回対象とするのはあくまでも標準規格の範囲内とします。
OSのシステムコールやサードパーティのライブラリまで範囲に含めると、ナル終端文字列無しでは済まないでしょう。

まず、真っ先に思いつくのはファイル操作です。

std::fopenを使うにはナル終端文字列が必要です。
しかし、これはstd::fstreamで代替できます。
std::fstreamに渡すパス名は、以前はナル終端文字列しか使えませんでしたが、最新の規格ではstd::stringも渡せるようになっています。

実際、標準Cライブラリを除けば、ナル終端文字列が必要な場面というのはなさそうです。
std::strtol関数などは使う機会も多いのですが、これはstd::istringstreamで代用できます。
どうしても標準Cライブラリを使わなければならない状況は限られています。

関数の返却値がナル終端文字列であっても、std::stringで受ければナル終端文字列は表に出てきません。
いろいろ考えた結果、標準Cライブラリでどうしても避けられないのはstd::getenv関数だけのようです。

あと、それ以外でナル終端文字列をプログラマーが意識しないといけないケースがひとつだけあります。
main関数の引数がそうです。

std::getenv関数は入門者には不要かもしれませんが、main関数の引数は避けて通れません。
逆にいえば、main関数の引数を扱うときが、ナル終端文字列について紹介するべきタイミングなのかもしれませんね。

Bookmark and Share