今天運行的程序崩潰了,發現原因爲程序中用到了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裏面,一般都預存了容器本身的長度。