std::string 賦值爲空指針

今天運行的程序崩潰了,發現原因爲程序中用到了STL的std::string賦值爲空指針,形式如下:

void fun(const char *pTest)
{
    std::string strTest = pTest;
}

就其語法來說,是沒有錯誤的,但程序運行卻崩潰了。

原因爲:std:string 不能接受賦值爲空指針。

原因爲:std::string 在賦值爲空指針的時候,會把指針指向的內容拷貝到std::string 裏的char空間裏;而空指針指向的空間,是不可訪問的,該程序自然會崩潰。

所以,形如下面的程序,都會崩潰。

char *p = NULL;
std::string str = p;

char *q = nullptr; // C++ 11
std::string strNull = q;

而一般來說,std::string賦值爲空串的形式爲:

std::string str = "";

判斷一個字符串爲空串的方法爲:

1)字符串與空串比較,即兩者相等判斷。

2)字符串函數empty() 函數。

一般來說,empty()函數是更好一點的判斷;因爲,STL裏面,一般都預存了容器本身的長度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章