有多少种printf和scanf的变体?

5
在C语言中,printfscanf有许多不同的版本,这让我感到好笑。我们来看看各个版本:
  • 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
感谢dreamlax,以下是使用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 而非普通参数

还有其他的吗?


没问题。与投票关闭该问题的人不同,我认为这将成为一个方便的参考。 - Delan Azabani
1
需要注意的是,asprintf 是 GNU 扩展而不是标准函数。但是可以使用 snprintf 轻松实现它。 - R.. GitHub STOP HELPING ICE
关闭,因为这不是一个真正的问题?!“很难确定这里正在问什么。这个问题是模棱两可的、含糊不清的、不完整的、过于宽泛的或修辞的,在目前的形式下无法合理地回答。” 没有歧义,问题也不宽泛或不完整,也不是修辞的。如果很难确定正在问什么,也许需要一堂阅读理解课程。 - dreamlax
@dreamlax,感谢您的重新开放投票。 - Delan Azabani
嘿,这个问题在谷歌搜索“printf变体”时仅次于维基百科/printf。 - Delan Azabani
显示剩余6条评论
2个回答

3

虽然有很多函数,但通常除了vfprintfvfwprintf之外,其他函数都只是这两个函数的包装器,它们会传递适当的FILE *(可能是专门设置为将内容写入字符串而不是磁盘文件的特殊文件),并根据需要选择性地调用va_startva_end(取决于它们是“v”版本还是普通版本)。


0

你错过了所有操作wchar_t的函数。


太棒了,让我们将函数数量翻倍吧!将它们添加到列表中 - Delan Azabani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接