C语言 工作室函数(sprintf, vsprintf和fprintf)背后的命名约定是什么?



这里的一篇文章解释了我们许多人多年来都知道的差异。我的假设是:

  • sprintf
    • 第一个字符"s"用于字符串类型的第一个参数。
    • 最后一个字符"f"表示格式?
  • fprintf
    • 第一个字符"f"用于字符串类型的第一个参数。
    • 最后一个字符"f"表示格式?
  • printf
    • 以"开头,没有第一个参数。
    • 最后一个字符"f"表示格式?

我认为第一个字母是第一个论点,但vsprintfprintf否认这一说法。最后一个字母似乎意味着它需要一个格式。更不用说U's, N's, C's, V's和F's的其他用法了。

如果有人能给解释源码来解释stdio中所有这些约定背后的原因,那就太棒了。

-

这不是您需要查看的第一个字符,而是前缀

"原始"功能,printf用于格式化打印。然后可以向printf名称添加一个或多个前缀:

  • f:打印到FILE
  • s:打印成字符串
  • v: print with va_list
  • n:打印给定数量的字符
  • w:打印宽字符:

所以我们得到:

  • printf:格式化打印到标准输出
  • fprintf:格式化打印到FILE
  • sprintf:格式化打印为字符串
  • snprintf:格式化打印为具有给定字符数的字符串
  • vprintf:用va_list格式化打印
  • vfprintf:将va_list格式化为FILE
  • vsprintf:将va_list格式化为字符串
  • vsnprintf:将va_list格式化为具有给定字符数的字符串
  • wprintf:将宽字符格式化为标准输出
  • fwprintf:将宽字符格式化为FILE
  • swprintf:将宽字符格式化打印为字符串
  • vwprintf:用va_list格式化宽字符的打印
  • vfwprintf:将va_list的宽字符格式化为FILE
  • vswprintf:将带有va_list的宽字符格式化打印为字符串

前缀:

  1. N -提供了一个安全网络来限制它可以安全地读写的字符数量。

  2. V -你正在使用变量参数列表。如果你想编写模拟printf的函数,这是很有用的。

  3. S -你正在读取/写入一个字符串

  4. F -你正在读取/写入/到文件

  5. P -你正在读取进程的输出

  6. None - printf和scanf没有前缀,因为它们只是从标准输入/输出中读取/写入-在UNIX世界中,这些只是文件。

后缀:

  1. F -您正在以格式化输出的方式读写(您说您将使用后跟变量参数的格式字符串)

  2. C -你每次处理一个字符。

  3. S -你正在处理字符串(数量几乎总是直到你到达下一个空白字符)。

  4. W -你处理的是单词(不要与英文单词混淆,word只是表示sizeof(int))

相关内容

  • 没有找到相关文章

最新更新