C语言中的printf族函数深入详解


使用manpages(man 3 printf)查看到的printf函数如下定义:
#include<stdio.h>
int printf(const char *format,...);
int fprintf(FILE *stream,const char *format,...);
int sprintf(char *str,const char *format,...);
int snprintf(char *str,size_t size,const char *format,...);
上面这几个函数都很好用,而且也很好理解。对于格式化输出字符串非常有用,比如Linux下面的rpc编程,函数调用只能有一个参数,那么要传递多个参数呢?当然是使用字符串了,将你定义的字符串按约定格式输出到一个buffer字符串中,然后传递就可以了。
    下面主要讲讲格式化输出中的格式!
----------------------------------------------------------------------------------
基本格式    含义
%d        整型十进制
%u        无符号整型(对于八进制,十六进制来说没有符号区别)
%o        八进制
%x/%X    小写/大写的十六进制
%c        字符
%s        字符串
%f        浮点数,不使用科学表示法
%g/%G    六位有效数字表示法,当太大或太小时自动使用科学表示法
%e/%E    科学表示法,六位有效数字
----------------------------------------------------------------------------------
修饰符        含义
l            修饰整型数据,表示long,如%ld,%lu,%lo,%lx
宽度修饰符    最小输出宽第,从来不会截断输出如:%10d
精度修饰符    对于整型,如果不够大,那么会在前面补0,对于字符
            串,会补空格,对于浮点数%f,%e表示小数点后多少
            位。
---------------------------------------------------------------------------------
标志            含义
‘-’            左对齐
‘+’            输出正负号,当然是对于十进制数来说的
‘ ’            和‘+’类似,但是正数
---------------------------------------------------------------------------------
可变域宽和精度
    当想要打印出指定宽度的数字或字符串时,就可以指定域宽,如:
#define    NAMESIZE    14
char name[NAMESIZE];
printf("%NAMESIZEs/n",name);
但是:上面的语法有错误,编译的时候会提示错误的类型%N,因为宏由预编译来处理,而预编译不会进入到字符串内部!
当想要打印指定的字符串宽度怎么办呢?使用宽度和精度修饰符“*”。
printf("%*.*s/n",14,14,name);
printf("%*.*s/n",14,5,name);    //只打印出5个字符,前面补空格
----------------------------------------------------------------------------------
ANSI C新增的修饰符%n
    %n将打印了的字符数输出到一个变量中,如
printf("hello%%n%n",&n);
printf("n=%d/n",n);    //将打印出7

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值