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

本文详细解读printf函数及其变种fprintf, sprintf, snprintf,介绍如何通过字符串格式化输出多参数,并重点讲解了基本格式、修饰符、域宽精度和ANSIC新增的特性。特别适合Linux rpc编程中的参数传递技巧。
摘要由CSDN通过智能技术生成

使用manpages(man 3 printf)查看到的printf函数如下定义:

#include

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值