在C语言中,
printf
和scanf
有许多不同的版本,这让我感到好笑。我们来看看各个版本:printf
:最初的实现方式;使用format
作为参数,然后是值fprintf
:与printf
相同,但在format
之前需要一个FILE
指针sprintf
:在format
之前需要一个char
指针snprintf
:与上面相同,但限制了写入缓冲区的大小以防止缓冲区溢出vprintf
:类似于printf
,但需要一个va_list
值参数列表vfprintf
:与fprintf
相当于va_list
vsprintf
:与sprintf
相当于va_list
vsnprintf
:与snprintf
相当于va_list
asprintf
:在format
之前需要一个char **
指针,并在指针上分配内存vasprintf
:与上面相同,但使用了va_list
scanf
:从stdin
读取format
并将其存储到参数中fscanf
:与scanf
相同,但在format
之前需要一个FILE
指针,并从该文件中读取sscanf
:与scanf
相同,但在format
之前需要一个char
指针,并从该指针中读取vscanf
:类似于scanf
,但需要一个va_list
值参数列表vfscanf
:与fscanf
相当于va_list
vsscanf
:与sscanf
相当于va_list
wchar_t
的版本:
wprintf
:使用wchar_t
替换了原始实现中的所有char *
fwprintf
:在format
之前将内容写入FILE
指针,使用wchar_t
swprintf
:在format
之前将内容写入char
指针,使用wchar_t
vwprintf
:写入到stdin
,使用va_list
而非普通参数vfwprintf
:写入到FILE
指针,使用va_list
而非普通参数vswprintf
:写入到char
指针,使用va_list
而非普通参数
还有其他的吗?
asprintf
是 GNU 扩展而不是标准函数。但是可以使用snprintf
轻松实现它。 - R.. GitHub STOP HELPING ICE