使用malloc或堆栈的C sprintf函数
我听说有一个版本的使用malloc或堆栈的C sprintf函数,c,gcc,printf,alloca,C,Gcc,Printf,Alloca,我听说有一个版本的sprintf(),可能是一个GNU/gcc扩展,它要么分配自己的缓冲区,我必须free(),要么使用堆栈,比如alloca() 这两种方法都适合我。谁能告诉我我在想什么函数吗?你可能是指什么 从手册页: 说明 函数asprintf()和vasprintf()类似于sprintf()和vsprintf(),只是它们分配了一个足够大的字符串来保存输出,包括终止的空字节,并通过第一个参数返回指向它的指针。当不再需要分配的存储时,应将该指针传递到空闲(3)以释放该存储 请注意,a
sprintf()
,可能是一个GNU/gcc扩展,它要么分配自己的缓冲区,我必须free()
,要么使用堆栈,比如alloca()
这两种方法都适合我。谁能告诉我我在想什么函数吗?你可能是指什么
从手册页:
说明 函数asprintf()和vasprintf()类似于sprintf()和vsprintf(),只是它们分配了一个足够大的字符串来保存输出,包括终止的空字节,并通过第一个参数返回指向它的指针。当不再需要分配的存储时,应将该指针传递到空闲(3)以释放该存储
请注意,asprintf是一个GNU扩展,它也可以在各种BSD实现中找到,但它不在标准C或POSIX中 从手册页:
说明 函数asprintf()和vasprintf()类似于sprintf()和vsprintf(),只是它们分配了一个足够大的字符串来保存输出,包括终止的空字节,并通过第一个参数返回指向它的指针。当不再需要分配的存储时,应将该指针传递到空闲(3)以释放该存储
请注意,asprintf是一个GNU扩展,它也可以在各种BSD实现中找到,但它不在标准C或POSIX中。此函数是否非标准并不重要,因为它可以作为
vsnprintf
(标准C99)或open_memstream
和vfprintf
(分别为POSIX 2008和C89)。此函数是否非标准并不重要,因为它可以作为vsnprintf
(标准C99)或open_memstream
和vfprintf
(分别为POSIX 2008和C89)的简单包装器来实现。