目录
介绍:
snprintf() 是一个 C 语言的标准库函数,用于格式化字符串输出到指定的缓冲区中。它的函数原型如下:int snprintf(char* str, size_t size, const char* format, ...);
功能:
将可变参数(...)按照format格式化成字符串,然后将其复制到str缓冲区中,并返回实际输出的字符数(不包括字符串终止符)。
(1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2) 如果格式化后的字符串长度 >= size,则只将其中的(size-1)个字符复制到str中,并给其后添加一个字符串结束符('\0'),返回值为欲写入的字符串长度。
参数:
str :指向目标缓冲区的指针;
size:目标缓冲区(str)的大小;
format:是格式化字符串的格式控制字符串,后面的参数是要格式化输出的数据。
返回值:
若成功则返回预写入的字符串长度,若出错则返回负值。
与snprintf的返回值不同,sprintf的返回值是成功写入的字符串长度,此处需要谨慎处理。
可以通过返回值判断函数执行情况:
返回值 < 0 : snprintf出错了
0 <=返回值<= size : snprintf成功,并且格式了完成的字符串。
返回值> size : snprintf成功,但要格式化的字符串被截断了。
头文件:
#include <stdio.h>
示例:
#include <stdio.h>
#include <string.h>
int main (void* arg)
{
int ret = 0;
char str[20] = {0};
// int snprintf(char* str, size_t size, const char* format, ...);
// memset(str, 0 , sizeof(str)); // 不需要memset操作
ret = snprintf(str, 5, "123456");
printf("5:str = %s\n ret = %d\n", str, ret);
ret = snprintf(str, 6, "123456");
printf("6:str = %s\n ret = %d\n", str, ret);
ret = snprintf(str, 7, "123456");
printf("7:str = %s\n ret = %d\n", str, ret);
return 0;
}
运行结果:
分析:
1.ret = snprintf(str, 5, "123456"); 由于size=5,字符串"123456"长度为6(不包括'\0'),所以只截取"1234"放到str,最后加上'\0';ret=6为"123456"长度。
2.ret = snprintf(str, 6, "123456"); 同理,此处size=6,还是不能完整的拷贝"123456",只能截取"12345"放到str,最后加上'\0';ret=6为"123456"长度。
3.ret = snprintf(str, 7, "123456"); 当size>"123456"长度时,snprintf可以进行完整的拷贝,所以str上内容为"123456",其后带了'\0',ret=6为"123456"长度