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

    字符串就把它用作指针。

  • 相关阅读:
    Day 24 Network Programming
    Day 22 23 Network Programming
    Day 21 OOP
    Day 20 OOP
    Day 19 OOP
    Day 18 OOP 面向对象编程
    Day 17 Frequently-used modules
    4--jenkins部署tomcat
    3--Jenkins详解 、用户权限、构建maven、参数化构建
    5--Zabbix分布式 监控 ; snmp监控
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333211.html
Copyright © 2011-2022 走看看