1. ホーム
  2. c++

[解決済み] c++のc_str関数の使い方

2022-03-05 14:53:20

質問

C++を読み始めたところ、C++にはCにはない文字列操作のための豊富な関数があることがわかりました。これらの関数を読んでいて、次のようなものに出会いました。 c_str() であり、私が理解したところでは c_str は、NULL終端であるか否かを問わず、NULL終端文字列に変換します。

の使い方を理解するために、どなたか例を示していただけませんか? c_str という関数があるのでしょうか?

解決方法は?

c_str が返されます。 const char* を指し、ヌル文字で終端する文字列(つまりC言語形式の文字列)です。の中身を渡したいときに便利です。 std::string を、C言語形式の文字列を扱うことを想定した関数に渡すことができます。

たとえば、こんなコードを考えてみよう。

std::string string("Hello world!");
std::size_t pos1 = string.find_first_of('w');

std::size_t pos2 = static_cast<std::size_t>(std::strchr(string.c_str(), 'w') - string.c_str());

if (pos1 == pos2) {
    std::printf("Both ways give the same result.\n");
}

実際に見る .

注意事項

¹ これは完全に正しいわけではありません。 std::string (Cの文字列とは異なり)その中に \0 文字が含まれています。もしそうであれば、返り値を受け取るコードは c_str() を解釈してしまうので、文字列が実際よりも短くなったように錯覚してしまいます。 \0 を文字列の終端と見なします。