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

    字符串就把它用作指针。

  • 相关阅读:
    定制可引导的iso镜像
    镜像封装
    nginx知识及nginx集群搭建
    注册系统服务
    安装pip
    获取硬件信息
    查看网卡信息
    python paramiko模块
    python pexpect模块
    python-nmap的使用
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333211.html
Copyright © 2020-2023  润新知