转载自:
语法:
int
snprintf
(
char
*str,
size_t
size,
const
char *format, ...);
snprintf
用于将可变个参数(...)按照format格式化成字符串,然后将其复制到str中
(1)
如果格式化后的字符串长度 <
size
,则将此字符串全部复制到str中,并给其后添加一个字符串结束符('\0');
(2)
如果格式化后的字符串长度 >=
size
,则只将其中的(
size-1
)个字符复制到str中,并给其后添加一个字符串结束符('\0')
函数返回值:
若成功则
返回欲写入的字符串长度
,若出错则返回负值
。
示例1:
#include <stdio.h> //snprintf()
#include <string.h> //strlen()
int
main()
{
char toname[30];
char *name = "yangtaiping";
printf("strlen(name) = %d\n", strlen(name));
snprintf(toname, strlen(name)+strlen("姓名:")+1, "姓名:%s", name);
printf("toname = %s\n", toname);
printf("strlen(name) = %d\n", strlen(name));
}
strcpy()
,
sprintf()
,
strcat()
存在安全隐患(缓冲区溢出), 其对应的安全版为:
strncpy()
,
snprintf()
,
strncat()
。
snprintf(s, 100, "%.*S",
3
, "abcd")
;执行后s的值为
abc
。
%.*s
表示有两项, 第一项指定了
长度
,第二项则是%s的内容,所以取前三位
类似的函数还有:
#include <stdio.h>
int printf(const char *format, ...);
//格式化输出到标准输出设备
int fprintf(FILE *stream,const char *format, ...);
//格式化输出到文件流
int sprintf(char *str,const char *format, ...);
//格式化的输出字符串输出到str指向的地址空间