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

    字符串就把它用作指针。

  • 相关阅读:
    2019牛客暑期多校训练营(第六场)
    2019牛客暑期多校训练营(第五场)
    2019牛客暑期多校训练营(第四场)
    2019牛客暑期多校训练营(第三场)
    Codeforces Round #554 (Div. 2) C. Neko does Maths (数论 GCD(a,b) = GCD(a,b-a))
    Codeforces Round #486 (Div. 3) C "Equal Sums" (map+pair<>)
    Count New String
    【模板】后缀自动机 (SAM)
    Watchcow
    二次剩余
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333211.html
Copyright © 2011-2022 走看看