printf, fprintf, sprintf, vsprintf, snprintf, vsnprintf之间的用法和区别

发布时间 2023-12-19 17:30:16作者: FreeCheng

1、printf是打印格式化字符串,返回值是成功打印的字符数;

int printf(const char *format, ...)

 

2、fprintf是将格式化数据写入到指定文件流中;

int fprintf(FILE *stream, const char *format, ...)

 

3、sprintf是将格式化的数据写入到指定字符串;

int sprintf(char *str, const char *format, ...)

 

4、vsprintf与sprintf类似,不同之处在于它使用可变参数列表(va_list)来传递参数,而不是通过参数列表中的省略号...来传递。

int vsprintf (char * str, const char * format, va_list arg);

 

5、snprintf与sprintf类似,但在此基础上加入了写入最大字符数目n的限制,可以防止缓冲区溢出的安全漏洞,更加安全。

int snprintf(char *str, size_t size, const char *format, ...)

 

6、vsnprint也是与vsprintf类似,在其基础上加入了下入最大字符数目n的限制,更加安全。函数的返回值是实际尝试写入的字符数(不包括结尾的空字符),如果未能完全写入,则返回值等于n。

int vsnprintf (char * s, size_t n, const char * format, va_list args)