Namaran

Code daily. Without assist.

2026-08-22

first_word.cpp

#include <string>

const std::string& first_word(const std::string& s) {
    std::string trimmed = s.substr(0, s.find(' '));
    return trimmed;
}

first_wordの戻り値を使うと未定義動作になります。なぜでしょうか?どう直せばよいですか?

Answer

trimmedはローカル変数で、関数が戻ると同時に破棄されます。const std::string&として返しているため、呼び出し側が受け取るのはすでに破棄されたオブジェクトへの参照(ダングリング参照)です。参照ではなく値で返してください: std::string first_word(const std::string& s) { ... return trimmed; }