一篇文章here解释了我们许多人多年来都知道的差异。我的假设是:
sprintf
- 第一个字符“s”代表字符串类型的第一个参数。
- 最后一个字符“f”代表格式?
fprintf
- 第一个字符“f”代表字符串类型的第一个参数。
- 最后一个字符“f”代表格式?
printf
- 以“”开头,没有第一个参数。
- 最后一个字符“f”代表格式?
我认为第一个字母代表第一个参数,但是 vsprintf
和 printf
否认了这种说法。最后一个字母似乎意味着它需要一种格式。更不用说 U、N、C、V 和 F 的所有其他用途。
如果有人能对 stdio
中所有这些约定背后的合理性给出解释和来源,那就太棒了。
奖金 - 获得对名称删除的额外尊重。
最佳答案
您需要查看的与其说是第一个字符,不如说是前缀。
“原始”函数 printf
用于格式化打印。然后可以将一个或多个前缀添加到 printf
名称:
f
:打印到FILE
s
:打印成字符串v
:用va_list
打印n
:打印给定数量的字符w
:打印宽字符:
所以这给了我们:
printf
: 格式化输出到标准输出fprintf
:格式化打印到FILE
sprintf
: 格式化打印成字符串snprintf
:格式化打印为给定字符数的字符串vprintf
:使用va_list
格式化打印到stdoutvfprintf
:使用va_list
格式化打印到FILE
vsprintf
: 用va_list
格式化打印到字符串vsnprintf
:使用va_list
格式化打印到具有给定字符数的字符串wprintf
:将宽字符格式化打印到标准输出fwprintf
:将宽字符格式化打印到FILE
swprintf
:将宽字符格式化打印成字符串vwprintf
:使用va_list
将宽字符格式化打印到标准输出vfwprintf
:使用va_list
将宽字符格式化打印到FILE
vswprintf
:使用va_list
将宽字符格式化打印到字符串
关于c - stdio 函数(sprintf、vsprintf 和 fprintf)背后的命名约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40118115/