寻找snprintf()的C源代码

kev*_*rpe 4 printf glibc newlib

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

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

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

我也尝试过查看newlib 1.19.0,但我遇到了_svfprintf_r().我无法在任何地方找到定义.

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

Rom*_*nko 5

我花了很长时间挖掘源代码以找到_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)
{
    ...
Run Code Online (Sandbox Code Playgroud)


Ben*_*hon 5

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

以下是实现的链接vfprintf(),其名称为snprintf():https: //sourceware.org/git/?p = glibc.git; a = blob; f = stdio-common/vfprintf.c

  • `vfprintf()`的定义从[第1235行]开始(https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-common/vfprintf.c#l1235). (2认同)

mah*_*mah 4

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