给char*一个名分
char* 不停的问自己:我是字符串还是指针?谁能给我一个名份?
先看如下程序:
char* GetName(int nID)
{
if(nID > 0)
return "Name";
else
return NULL;
}
const char* GetConstName(int nID)
{
if(nID > 0)
return "Name";
else
return NULL;
}
一切看起来都是那么的自然,一切看起来都是顺理成章。果真如此吗?试一下下列测试代码:
int main(int argc, char* argv[])
{
//-----------------------------------------
string strName = GetName(1);
cout << strName << endl;
strName = GetName(0); //run error
cout << strName << endl;
//---------------------------------
const string strConstName = GetConstName(1);
cout << strConstName << endl;
const string strConstName2 = GetConstName(0); //run error
cout << strConstName2 << endl;
return 0;
}
一运行就死掉!
char* 可以当作字符串来使用。但在使用的过程中,有时候却又把它用作了指针。正如那两个函数返回
NULL一样。char*明明是个字符串,为什么要返回各NULL?要得到一个空字符串,请使用""吧。把return
NULL;改成return "";就万事大吉了。这样char*前后就一致了。
或许你在埋怨测试代码没有用char*接收返回值。那好,看如下:
char* pStr = GetName(0);
strcmp(pStr, "");
在比较的的时候,仍然会出错!总不能不让我比较字符串吧!
如何解决?很简单:既然给了char*一个字符串的名份,那就要让它的名份保持一致。不要因为它是个空
字符串就把它用作指针。