printf, fprintf, dprintf, sprintf, snprintf
vprintf, vfprintf,vdprintf, vsprintf, vsnprintf
函数原型
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int dprintf(int fd, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vdprintf(int fd, 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);
%规则
%[flags][width][.perc] [F|N|h|l]type
type:常见的是d(整形),c(单个字符),s(字符串),p(指针),x(地址)
width:宽度。n,不够会填充空格,0n,左边会填充0。
flags:输出样式。默认输入右对齐。-:输出左对齐,+会显示+或-。一个空格,会显示-,不显示+号
.perc:表示小数位数。先满足.perc,再满足width
F:远指针
N 近指针
h 短整数或单精度浮点数
l 长整数或双精度浮点数
1.printf
这个最简单
int a = 100;
printf("a = \d",a);
2.fprintf
向文件流中打印
FILE* fp;
fp = fopen("test.txt","w");
int a = 100;
//向文件流中打印
fprintf(fp, "a = %d", a);
//向标准输出打印
fprintf(stdout, "a = %d", a);
3.dprintf
向文件描述符写入文本
int fd;
fd = open("test.txt",O_RDWR);
dprintf(fd, "hello world");
4.sprintf
向字符串写入文本,没有进行长度控制,主要程序员自行控制
char buf[256];
sprintf(buf,"hello world");
5.snprintf
向字符串写入文本,有长度控制
char buf[256];
snprintf(buf,sizeof(buf),"hello world");
6.vprintf
//可以自定义格式化打印
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
void WriteFrmtd(char *format, ...)
{
char buf[256];
va_list args;
snprintf(buf, sizeof(buf), "%s-%d-%s\n",format,1,"lalala");
va_start(args, format);
vprintf(buf, args);
va_end(args);
}
int main()
{
float buf = 111.0;
int num = 0;
WriteFrmtd("hello world");
return 0;
}
vfprintf, vdprintf, vsprintf, vsnprintf结合fprintf和vprintf可以自行理解。
特殊用法
%n可以计算前面打印字符的数量
float buf = 111.0;
int num = 0;
printf("%fhel%nlo\n",buf,&num);
printf("num = %d\n",num);