参考链接
https://blog.csdn.net/imhikaru/article/details/116163112
b3f4c410-ee90-4128-8b1d-d331b635c295
- 在支持snprintf的编译器里边,只使用snprintf,如果buffer的长度不够存放,则会被截断,buffer里边的字符串带结束符。
- 有标准库函数的,尽量使用标准库函数,便于移植。
- 函数开头带 _ 表示不是标准库实现,是微软自己实现的。结果带 _s 表示安全版本,避免错误的写入其他的内存区域。
函数 | 定义 | 说明 | |
---|---|---|---|
printf | int printf( const char *format, …) | 标准库<stdio.h> 发送格式化输出到标准输出 stdout 不用解释,最常用的函数 | |
sprintf | int sprintf( char *str, const char *format, …) | 标准库<stdio.h> 发送格式化输出到字符串 跟上一个函数的差别就是,上一个函数是输出到标准输出,这个函数是输出到一个字符串,注意:这个函数不会(也无法)检查写入的长度,所以如果写入超过了长度,其他内存的地址可能被改写,所以是不安全的。 | |
sprintf_s | int sprintf_s( char *buffer, size_t sizeOfBuffer, const char *format [, argument] … ); | 不是标准库 因为可能会写入其他的内存地址,所以上一个函数不安全,这个函数是上一个的安全版本,差别就是增加了一个size,写入数据长度不能超过size,如果超过size会报错。 不推荐使用 | |
snprintf | int snprintf ( char * str, size_t size, const char * format, … ) | 标准库<stdio.h> 跟上个函数参数一样,差别就是,上一个函数超过长度直接报错,这个函数超过长度会截断,不会报错 推荐使用 | |
_snprintf | int _snprintf( char *buffer, size_t count, const char *format [, argument] … ); | 跟上一个函数snprintf差不多,唯一差别就是缓冲区是不带结束符的。 不推荐使用 | |
vsprintf | int vsprintf( char *str, const char *format, va_list arg) | 标准库<stdio.h> 跟sprintf类似,差别就是sprintf使用的是可变参数,而vsprintf使用的是va_list | |
vsnprintf | int vsnprintf ( char * s, size_t n, const char * format, va_list arg ) | 标准库<stdio.h> 跟上一个函数类似,差别是增加了一个长度参数 推荐使用 |