printf家族探秘

有一个函数,是我们从学习c语言就开始的第一天就接触的,那就是printf函数,可是这个家族的函数,带给我们的便利却不是一点半点,所以写一篇用法总结。

1.printf函数

格式化输出,可以输出八进制,十进制,十六进制,可以输出字符串,%p输出地址。基本的东西就不在赘述了。

printf是有返回值的,只是一般我们用不到。printf()函数也有一个返回值,它返回所打印的字符的数目。如果有输出错误,那么printf()会返回一个负数(printf( ) 的一些老版本会有不同的返回值)。

*号符,在printf函数中有着很强的格式化作用,如同linux中一样,* 代表任意匹配。

再看一个格式化输出十六进制的例子:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

int main(void)
{
    unsigned int a=0x1;
    printf("%#010x",a);
    return 0;
}

在32位mcu编程中经常会打印地址,如stm32,而一般要求打印8个字节,而字节前导我们不希望使用空格而是使用前导0来填充,就可以使用上面的写法。

# 号:使用格式说明的可选形式,#o 打印的则以0(零)开始,八进制,#x或者#X,则以0x或者0X开始,十六进制。

0(零):对于所有数字格式,用前导零填充而不是空格。如果出现 - 标志或者指定了精度(对于整数)则忽略该标志。

那么%#010x:就表示:以十六进制输出,输出长度一共为10,前导用0填充而不是空格。由于#x的作用占用了两个位置,因为要输出0x,所以还剩下8个位置,这样就指定输出了十六进制8个字节长度的数据。

如果这样觉得我好阅读,可以不使用#,直接手动书写0x前缀,指定宽度为8,前导0即可:如:

这是printf函数的常用方法,但是正真重要的,还是在于可变参数及其家族的变种函数。

2.fprintf函数

未完待续...

时间: 2024-10-12 11:12:26

printf家族探秘的相关文章

sscanf和sprintf是scanf和printf家族用法 (转)

sscanf和sprintf是scanf和printf家族用法 sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数头文件 stdio.h原型int sscanf(const char *buffer,const char *format,...);int sprintf(char *buffer,const char *format,...);功能:类似于scanf和printf 但把字符串*buffer用于输入输出1.sprintf用于

scanf与printf详解(转)

一.scanf家族 1.scanf家族的原型 int scanf(char const *format,...); int fscanf(FILE *stream,char const *format,...); int sscanf(char const *buffer,char const *format,...); 每个原型中的省略号表示一个可变长度的指针列表.从输入转换而来的值逐个存储到这些指针指向的内存位置.由于C的参数传递都是传值调用决定了可变参数都是指针列表.注意:若给的不是指针,

系统编程--标准IO

1.流和FILE对象 对于国际字符集,一个字符可以由一个以上的字节来表示.标准I/O文件流可以用来操作单字节和多字节(宽,wide)字符集.一个流的方向(orientation)决定了字符是以单字节还是多字节的方式读取,当一个流被创建时,它没有方向.如一个多字节I/O函数(见<wchar.h>)用在了没有方向的流上,那么流的方向会设为面向宽字符的.如果一个字节I/O函数用在一个没有方向的流上,那么流的方向会设为面向字节的.只有两个函数可以在设置后改变这个方向.freopen函数(简单说明)将会

[C和指针]第四部分

第十一章 高级指针话题 第十二章 预处理器 第十三章 输入/输出函数 第十一章            高级指针话题 指向指针的指针 int i; int *pi; int **ppi; 变量i 是一个整数,pi是一个指向整型指针,ppi是一个指向pi的指针,所以它是一个指向整型的指针的指针. ppi = π这条语句把ppi初始化为指向变量pi. *ppi = &i;这条语句把pi(通过ppi间接访问)初始化为指向变量i.经过上面两条语句之后: 现在,下面各语句具有相同的效果(都是将变量i的值赋值

从 C++ 到 Objective-C 的快速指南

英文原文:From C++ to Objective-C: A quick guide for practical programmers 标签: Objective-C C/C++ 233人收藏此文章, 我要收藏oschina 推荐于 2年前 (共 11 段, 翻译完成于 05-13) (29评) 参与翻译(4人): leoxu, 无若, nbafifa02, 地狱星星 仅中文 | 中英文对照 | 仅英文 | 打印此文章 简介 当我开始为iOS写代码的时候,我意识到,作为一个C++开发者,我必

读书笔记-APUE第三版-(5)标准IO库

ISO C标准I/O库使用流的概念读写文件.流是对数据传输的抽象,可以把流理解为从起点到终点间的字节序列. 标准I/O库通过维护进程空间内的缓冲区,减少read/write系统调用次数来提高I/O效率.之前介绍的Unbuffered I/O和文件描述符fd打交道,标准I/O则使用FILE指针. typedef struct{ short level;/*缓冲区满程度*/ unsigned flags;/*文件打开状态标志*/ char fd;/*文件描述符*/ unsigned char hol

glib-2.40编译安装

1 安装glib库所需要的依赖库: libffi-3.0.0.tar.gz glib-2.40.0.tar.xz 安装依赖库libffi: tar xf libffi-3.0.0.tar.gz cd libffi-3.0.0 ./configure make make install 配置环境变量: vim /etc/profile 添加下面的内容: export LIBFFI_CFLAGS=-I/usr/local/lib/libffi-3.0.0/include export LIBFFI_

探秘中国小卫星家族:暗物质量子成员领跑世界ap

对于未来,杨鑫淼在接受媒体采访的时候毫不掩饰的表示,想成为EA.G那样的世界级游戏公司.公司生产的产品为水稻.小麦.油菜全喂入履带自走式多功能联合收割机.暗访过程中,销售人员递给记者的名片上写着这家公司的全称??北京腾达庆红汽车销售服务有限公司.孩子母亲告诉民警,自家女儿平时有点叛逆,这已经是她第五次从家里走出来了.该团伙把盗窃获得的信用卡信息拿到第二人生等虚拟世界贩卖,被游戏中的英国特工卧底发现踪迹.日前,邕宁法院立案庭成功调解了一起叔叔起诉侄子的继承纠纷案.而采用惠普OV后,一夜之间就能完成

Redis源码中探秘SHA-1算法原理及其编程实现

导读 SHA-1算法是第一代"安全散列算法"的缩写,其本质就是一个Hash算法.SHA系列标准主要用于数字签名,生成消息摘要,曾被认为是MD5算法的后继者.如今SHA家族已经出现了5个算法.Redis使用的是SHA-1,它能将一个最大2^64比特的消息,转换成一串160位的消息摘要,并能保证任何两组不同的消息产生的消息摘要是不同的.虽然SHA1于早年间也传出了破解之道,但作为SHA家族的第一代算法,对我们仍然很具有学习价值和指导意义. SHA-1算法的详细内容可以参考官方的RFC:ht