瀏覽stringstream、string 和char* 轉換
在C 處理字串時,程式設計師在stringstream、string 之間轉換時經常會遇到混亂和char*。本文深入探討了這些轉換的複雜性,澄清了誤解並提供了實用的解決方案。
理解stringstream.str().c_str()
癥結所在問題的關鍵在於理解stringstream.str().c_str() 傳回的字串的生命週期。這個臨時字串物件在表達式末尾被銷毀,使得從它獲得的任何指標(如 const char* cstr2)無效。
解決混亂
到解決此問題,請避免將 stringstream.str().c_str() 直接指派給 const char*。相反,在另一個字串物件中建立臨時字串的副本,然後從中取得C 字串:
const std::string tmp = stringstream.str(); const char* cstr = tmp.c_str();
或者,透過在表達式中使用臨時字串來限制臨時字串的生命週期:
use_c_str( stringstream.str().c_str() );
為了效率和清晰度,將臨時值綁定到const 引用:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
以上是如何在 C 中的 stringstream、string 和 char* 之間安全地轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!