【发布时间】:2011-07-27 14:24:49
【问题描述】:
我听说有一个版本的 sprintf(),可能是一个 GNU/gcc 扩展,它要么分配自己的缓冲区,我必须 free() 或使用堆栈,如 alloca()。
任何一种方法都适合我。谁能告诉我我在想什么功能?
【问题讨论】:
我听说有一个版本的 sprintf(),可能是一个 GNU/gcc 扩展,它要么分配自己的缓冲区,我必须 free() 或使用堆栈,如 alloca()。
任何一种方法都适合我。谁能告诉我我在想什么功能?
【问题讨论】:
你可能是指asprintf?
来自手册页:
说明
函数 asprintf() 和 vasprintf() 与 sprintf() 和 vsprintf() 类似,不同之处在于它们分配了一个足够大的字符串来保存包括终止空字节在内的输出,并返回一个指向它的指针通过第一个参数。这个指针应该被传递给 free(3) 以在不再需要时释放分配的存储空间。
注意 asprintf 是一个 GNU 扩展,在各种 BSD 实现中也可以找到它,但它不在标准 C 或 POSIX 中。
【讨论】:
vsnprintf(标准C99)或open_memstream和vfprintf(POSIX 2008和C89,分别)。