4

我需要将 snprintf() 移植到另一个不完全支持 GLibC 的平台。

我正在寻找 Glibc 2.14 源代码中的底层声明。我遵循了许多函数调用,但卡在 vfprintf() 上。然后它似乎调用了_IO_vfprintf(),但我找不到定义。可能宏正在混淆事物。

我需要查看真正的 C 代码,它扫描格式字符串并计算如果输入缓冲区足够大时它将写入的字节数。

我也尝试查看 newlib 1.19.0,但我被困在 _svfprintf_r() 上。我在任何地方都找不到定义。

有人可以为我指出 snprintf() 的定义或另一个定义吗?

4

3 回答 3

6

我花了很长时间挖掘资源以_svfprintf_r()在 Newlib 中找到(和朋友)定义。既然 OP 提出了这个问题,我会把我的发现发布给那些也需要这些的可怜的灵魂。以下适用于 Newlib 1.20.0,但我猜它在不同版本之间或多或少是相同的。

实际来源位于vfprintf.c文件中。有一个宏_VFPRINTF_R设置为_svfiprintf_r_vfiprintf_r_svfprintf_r_vfprintf_r(取决于构建选项)之一,然后相应地定义实际的实现函数:

int
_DEFUN(_VFPRINTF_R, (data, fp, fmt0, ap),
       struct _reent *data _AND
       FILE * fp           _AND
       _CONST char *fmt0   _AND
       va_list ap)
{
    ...
于 2013-03-01T11:49:06.393 回答
4

http://www.ijs.si/software/snprintf/有他们声称的 snprintf 的可移植实现,包括 vsnprintf.c、asnprintf、vasnprintf、asprintf、vasprintf。也许它可以提供帮助。

于 2011-06-15T10:42:03.213 回答
4

GNU C 库 (glibc) 的源代码托管在sourceware.org上。

这是一个实现的链接,vfprintf()由以下方式调用snprintf()https ://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c

于 2016-03-28T14:17:51.537 回答