C++のstd::stringの初期化とNULLポインタの取り扱い
C++での文字列操作は std::string
クラスを使用することで容易になりますが、初期化時にCスタイルの文字列(const char*
)を使用する場合、特にそのポインタが NULL
の場合には注意が必要です。この記事では、std::string
の初期化方法と、初期化データが NULL
の場合の挙動について詳しく解説します。
std::stringの初期化
std::string
はC++の標準ライブラリの一部で、動的にサイズが変更可能な文字列を扱います。通常、std::string
は以下のように初期化されます。
const char* example_c_str = "example";
std::string example_string(example_c_str);
この例では、Cスタイルの文字列 example_c_str
を使用して std::string
オブジェクト example_string
を初期化しています。
NULLポインタが渡された場合の挙動
Cスタイルの文字列を指すポインタが NULL
の場合、std::string
のコンストラクタに渡すとどうなるのでしょうか?
const char* null_c_str = NULL;
std::string null_string(null_c_str);
このコードは、実行時に例外を引き起こします。具体的には、std::string
のコンストラクタは NULL
が渡された場合に std::logic_error
(通常は std::invalid_argument
)をスローします。これは、std::string
コンストラクタが内部で NULL
ポインタのチェックを行い、有効なメモリアドレスを期待しているためです。
安全な初期化のためのチェック
NULL
ポインタが渡される可能性がある場合、std::string
を初期化する前にこれをチェックすることが重要です。
const char* input_c_str = get_input(); // NULLを返す可能性がある関数
if (input_c_str != NULL) {
std::string safe_string(input_c_str);
} else {
std::cerr << "Error: NULL pointer received." << std::endl;
}
このように安全チェックを行うことで、例外を防ぎアプリケーションの安定性を保つことができます。
まとめ
std::string
の初期化には通常、Cスタイルの文字列が使用されますが、これが NULL
の場合には例外が発生します。安全なプログラミングのためには、ポインタが NULL
でないことを確認することが推奨されます。
Discussion