sprintf 和 snprintf 函数
头文件:
#include <stdio.h>
函数原型:
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
描述:
同 printf
的原理一样,不过
printf
是将格式化字符串
format
输入到
stdout
输出流中,而 sprintf
是将格式化字符串输入到一块字符地址中,
snprintf
指明了最多能写入多少字节格式化字符串,如果 format
长度比
size
小则全部可以写入
str
中然后再补上‘\0’,如果
format
的长度比
size
大则只保存
size-1
字节个
format
,然后补一 个’/0’
,写到
str
中
返回值:
若成功则返回预写入的字符串长度,若出错则返回负值
备注:
无
vprintf,vsprintf 和 vsnprintf 函数
头文件:
#include <stdarg.h>
函数原型:
int vprintf(const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
描述:
vprintf 类的格式化输出函数和
printf
类的格式化输出函数只在于参数的不同,printf 类的输出函数是可变长参数的,而
vprintf
类的输出函数参数变成
va_list
,一般是配合可变长接口做使用。其他没有任何不同
使用示例:
void fun(int num,...)
{
va_list ap;
va_start(ap,num);
//1
vprintf("%d,%d,%d,%d\n",ap);
//2
// for(int i = 0;i < num;i++)
// {
// vprintf("%d\n",ap);
// }
va_end(ap);
}
int main ()
{
fun(4,100,200,300,400);
return 0;
}
备注:
如上图例子可知,在 vprintf
内部其实实现了
va_arg(va_list,type)
的操作,而且根据格式化输出的%
去执行不同的
va_arg
操作,例如,
vaprintf
(
”%c,%d,%f”,ap
)
;其实相当于执行了:
printf(“%c”,va_arg(ap,char)); printf(“%d”,va_arg(ap,int)); printf(“%f”,va_arg(ap,float));这三条语句。
sscanf 函数
头文件:
#include <stdio.h>
函数原型:
int sscanf(const char *str, const char *format, ...);
描述:
sscanf 函数和
scanf
类似,不过
scanf
是从
stdin
输入缓冲区中取格式化数据给对应的内存空间,而 sscanf
函数则是从
str
中获取格式化字符串输出到内存空间中。
返回值
:
返回读取的数据个数
使用示例:
int main ()
{
char str[128] = "123,a,12.5,nihao";
int a;
char b;
float c;
char buf[16] = {0};
sscanf(str,"%d,%c,%f,%s",&a,&b,&c,buf);
printf("a = %d,b = %c,c = %f,buf = %s\n",a,b,c,buf);
return 0;
}
vscanf 和 vsscanf 函数
头文件:
#include <stdarg.h>
函数原型:
int vscanf(const char *format, va_list ap);
int vsscanf(const char *str, const char *format, va_list ap);
描述:
vscanf
类的和
scanf
类的区别只在于参数的不同,
scanf
类使用的是可变参数,而
vcanf
类函数使用的是
va_list
参数,通常配合在可变函数内进行使用。
使用示例:
void fun(int num,...)
{
va_list ap;
va_start(ap,num);
//1
vscanf("%d,%d,%f,%f",ap);
//2
// for(int i = 0;i < num;i++)
// {
// vscanf("%d",ap);
// }
va_end(ap);
}
int main ()
{
int a;
int b;
float c;
float d;
fun(4,&a,&b,&c,&d);
printf("%d,%d,%f,%f\n",a,b,c,d);
return 0;
}
备注:
无