【问题标题】:Handle a char array returned from a function in C处理从 C 中的函数返回的 char 数组
【发布时间】:2015-08-20 15:18:57
【问题描述】:

我正在使用一个名为 tinyXML 的库,它解析 XML 文件。它的许多方法返回一个 const char*。

读完这个问题后: how to return a char array from a function in C

我现在相信,每次方法返回一个 char* 时,调用者(我)有责任明确释放它,因为它可能在堆上动态分配。我是对/错吗?我可以假设什么?

(如果我曾经写过一个库,我宁愿返回 std::string 而不是 char* 数组,因为它们对用户来说要简单得多。)

【问题讨论】:

  • grinninglizard.com/tinyxmldocs/index.html: "TinyXML可以编译使用或不使用STL。使用STL时,TinyXML使用std::string类,完全支持std::istreamstd::ostreamoperator<< , 和 operator>>。许多 API 方法同时具有 const char*const std::string& 形式。”当然 C 没有 std::string,所以仍然需要使用 char* 的选项(假设它可以从 C 中使用;我不确定)。此外,home page 建议“您可能需要考虑 TinyXML-2”。

标签: c++ c arrays pointers memory


【解决方案1】:

您不能假设任何事情,并且必须检查您正在调用的方法的文档,以了解您是否必须释放指针。有时返回 const char * 的函数可能会返回静态分配的字符串:

const char *getName(){
    return "SPQR3";
}

或者它可能是其他人负责释放的指针。例如,strcpy 的返回值与您作为输入传递给它的指针相同。

【讨论】:

    【解决方案2】:

    阅读图书馆的文档。这两种用法(指向内部缓冲区的指针,或指向动态分配的缓冲区的指针)都很常见,并且无法单独与函数原型区分开来。

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2011-08-05
      相关资源
      最近更新 更多