给char*一个名份

给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*一个字符串的名份,那就要让它的名份保持一致。不要因为它是个空

字符串就把它用作指针。

posted on 2005-04-19 16:22  张大大123  阅读(99)  评论(0编辑  收藏  举报

导航