系統API提供的都是C風格介面,C++98的string只能提供的轉換,用來轉換成理論上不是可靠的,string內部也不一定是連續的。
PS:別說9102年了怎麼還用C++98。
不過就個人使用而言,C++11開始的string取代char陣列是沒問題的。
格式化字串可以直接傳和給前2個引數即可,想包裹成一個函式就用傳。
字串分割,利用 方法包裝一下就OK,不在乎複製開銷就返回,在乎開銷可以用,用不了C++17可以自造個簡易,甚至可以簡單地返回(但需要謹慎使用,比如指標指向的發生記憶體重分配就GG)。
稍微複雜點的查詢、替換也可以藉助正則表示式來實現。
但是呢,說到底,這些場景禁止你用,你用char陣列也沒多麻煩,尤其是Linux C提供了更豐富的字串操作函式,跟最新版本的比起來基本上也只有不能跨平臺這個缺點了。(然而我賭5毛至少在國內,在Linux環境下開發C++的比用C++11開發跨平臺C++的要多很多)而且在簡單的字串處理場景下,用char陣列讀起來更加清晰,發生了多少次複製直觀可見,也可以明確控制是棧上的陣列還是堆上動態分配的所謂動態陣列。
我自己用用得最爽的大概是,解析命令列引數的int時,直接用,使用者輸入引數格式不對直接拋異常崩了。用還得判斷下是返回值、以及是否溢位。(對那些從不檢查返回值的人來說也沒區別)
系統API提供的都是C風格介面,C++98的string只能提供的轉換,用來轉換成理論上不是可靠的,string內部也不一定是連續的。
PS:別說9102年了怎麼還用C++98。
不過就個人使用而言,C++11開始的string取代char陣列是沒問題的。
格式化字串可以直接傳和給前2個引數即可,想包裹成一個函式就用傳。
字串分割,利用 方法包裝一下就OK,不在乎複製開銷就返回,在乎開銷可以用,用不了C++17可以自造個簡易,甚至可以簡單地返回(但需要謹慎使用,比如指標指向的發生記憶體重分配就GG)。
稍微複雜點的查詢、替換也可以藉助正則表示式來實現。
但是呢,說到底,這些場景禁止你用,你用char陣列也沒多麻煩,尤其是Linux C提供了更豐富的字串操作函式,跟最新版本的比起來基本上也只有不能跨平臺這個缺點了。(然而我賭5毛至少在國內,在Linux環境下開發C++的比用C++11開發跨平臺C++的要多很多)而且在簡單的字串處理場景下,用char陣列讀起來更加清晰,發生了多少次複製直觀可見,也可以明確控制是棧上的陣列還是堆上動態分配的所謂動態陣列。
我自己用用得最爽的大概是,解析命令列引數的int時,直接用,使用者輸入引數格式不對直接拋異常崩了。用還得判斷下是返回值、以及是否溢位。(對那些從不檢查返回值的人來說也沒區別)