Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用malloc或堆栈的C sprintf函数_C_Gcc_Printf_Alloca - Fatal编程技术网

使用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)的简单包装器来实现。