2013-09-21 136 views
-2

我有std :: string指針,我喜歡將它的值複製到普通std :: string 我找不到快捷的方法來做到這一點。 我有這樣的:如何將std :: string指針轉換爲std :: string

int main() 
{ 
    std::string * pStr = new std::string("hello") 
    std::string strNew = pStr->??? // how to convert ? 


    return 0; 
} 
+0

答案很明顯,並且已經給出了,但是它忽略了一個更大的問題:爲什麼首先有一個指向std :: string的指針?你會'不''新'一個'std :: string',並且關於使用指針的唯一原因是作爲一個「可能」返回值,對於執行某種查找的函數。 –

回答

2

兩種方式:

std::string strNew = pStr->c_str(); // Be careful of `\0` with in the string 

std::string strNew = *pStr; 

第二個的爲佳,因爲C語言風格的字符串可以不表示std :: string corr ectly。它首先結束一個字符串\0並忽略尾隨。

+0

爲什麼第二個更好? – jgmao

+1

@jgmao:第一個是不正確的。它會在'std :: string(「a \ 0b \ 0c」)'上失敗,並且它會微妙而安靜地失敗。 –

+1

@jgmao:因爲c-style字符串不能正確表示'std :: string'。它首先結束一個字符串'\ 0'並忽略尾隨。 – deepmax

5

取消引用:

std::string strNew = *pStr; 
+0

並明確它是一個構造函數,而不是一個assignemnt:'std :: string strNew(* pStr);' –

+0

@VincenzoPii:相當,雖然對於現有字符串的賦值也是如此。 –

相關問題