瓜瓜派的瓜瓜
分类: C/C++
2012-01-09 16:29:18
使用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 |