printf()、fprintf()、sprintf()、snprintf() 函数
函数原型:
#include <cstdio> //头文件
int printf( const char* format, ... );
int fprintf( std::FILE* stream, const char* format, ... );
int sprintf( char* buffer, const char* format, ... );
int snprintf( char* buffer, std::size_t buf_size, const char* format, ... );
函数作用:从给定位置加载数据,转换为字符串等价版本,并将结果写入各种池
- 写结果到
stdout
- 写结果到文件流
stream
- 写结果到字符串
buffer
- 写结果到字符串
buffer
。至多写buf_size - 1
个字符。产生的字符串会以空字符\0
终止,除非 buf_size 为零!若 buf_size 为零,则不写入任何内容,且 buffer 可以是空指针,然而依旧计算返回值(实际写入的字符数,不包含空终止符)并返回。
注意:若调用 sprintf
或 snprintf
导致在重叠的对象间发生复制,则行为未定义。如下:
sprintf(buf, "%s text", buf); //未定义行为
参数:
stream
:要写入的输出文件流;buffer
:指向要写入的字符串的指针;buf_size
:写入至多buf_size - 1
个字符,再加上空终止符;format
:指向指定如何转译数据的空终止多字节字符串的指针;...
:指定要打印数据的参数。
返回值:
- 若成功则为写入的字符数,若发生错误则为
-1
,并设置errno
; - 注意
sprintf()
和snprintf()
写入字符数不包含空终止字符; - 且
snprintf()
当且仅当返回值非负且小于buf_size
才完全写入。
参考:https://zh.cppreference.com/w/cpp/io/c/fprintf