使用malloc或堆栈的C sprintf函数

hip*_*ail 0 c printf gcc alloca

我听说有一个版本sprintf(),可能是一个GNU/gcc扩展,它可以分配自己的缓冲区,我必须free()或者可能使用堆栈就像alloca().

这两种方法都适合我.谁能告诉我我在想什么功能?

Pau*_*l R 5

你可能是指asprintf

从手册页:


描述

函数asprintf()和vasprintf()是sprintf()和vsprintf()的类似函数,除了它们分配足够大的字符串来保存包括终止空字节的输出,并通过第一个参数返回指向它的指针.应该将此指针传递给free(3)以在不再需要时释放已分配的存储.


请注意,asprintf是一个GNU扩展,也可以在各种BSD实现中找到,但它不在标准C或POSIX中.

  • 这个函数是非标准的并不重要,因为它可以实现为`vsnprintf`(标准C99)或`open_memstream`和`vfprintf`(分别是POSIX 2008和C89)的简单包装. (2认同)