【问题标题】:Returning pointer to character in C [duplicate]在C中返回指向字符的指针[重复]
【发布时间】:2020-04-11 20:04:06
【问题描述】:

我有一个旧代码 sn-p,如下所示:

const char *GetStr() const {
  return ("");
}

我想知道这是否是一个有风险的代码,而不是返回一个全局字符指针,而是返回一个本地字符串文字? 例如,也许下面的代码 sn -p 更好。

const char *NullStr = "";
const char *GetStr() const {
  return NullStr; // instead of ""
}

有什么优点/缺点?

甚至以下实现可能会更好:

const char *GetStr() const {
  static const char * lNullStr = "";
  return lNullStr;
}

【问题讨论】:

  • 您使用的是 C++ 还是 C?
  • C++,但它是遗留代码的一部分,继承
  • 如果你真的在编写 C++(我相信你确实考虑到了 const 限定函数,即使对于遗留 C++ 代码也不要标记 C)那么你不应该对字符串使用原始指针首先。在我看来,这个函数的作者需要一个头脑来编写它,我一点也不谦虚。对于“现代”C++,还有返回optional 数据的替代方法。最后,如果确实需要指针,IMO 返回“null”的正确方法是空指针。

标签: c++ arrays pointers return


【解决方案1】:

您的第一个 sn-p 不是严格可移植的。

另一种选择是:

const char *GetStr() const {
    static const char* s = "";
    return s;  
}

并且还具有s 包含在函数中的好处。

【讨论】:

    猜你喜欢
    • 2018-03-23
    • 2016-03-25
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多