处理C语言中从函数返回的字符数组

8
我正在使用一个名为tinyXML的库,它解析XML文件。其中许多方法返回const char*。
在阅读了这个问题之后: 如何从C函数中返回char数组 我现在相信每次方法返回char*时,调用者(即我)都需要显式释放它,因为它很可能是在堆上动态分配的。我是对的/错的?我能做出什么样的假设?
(如果我曾经编写过一个库,我会更愿意返回std::string而不是char*数组,因为它们对用户来说更简单。)

TinyXML可以编译成使用或不使用STL。当使用STL时,TinyXML使用std::string类,并完全支持std::istreamstd::ostreamoperator<<operator>>。许多API方法都有const char*const std::string&形式。当然,C语言没有std::string,因此仍然需要使用char*选项(假设它可以从C语言中使用;我不确定)。另外,主页建议“您可能要考虑TinyXML-2”。 - Keith Thompson
2个回答

7

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

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

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


5

阅读库的文档。指向内部缓冲区或指向动态分配缓冲区的两种用法都很常见,单凭函数原型无法区分它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接