0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言printf函数族学习笔记

CHANBAEK 来源:非典型技术宅 作者:非典型技术宅 2023-11-24 11:15 次阅读

printf 函数族

絮絮叨叨

printf 应该是学习C语言的第一个函数,我们都知道它是用于字符串格式化输出的。但是它的用法你真正了解了吗?

printf 系列函数不仅仅可用用来打印字符串到控制台,还可以向其他标准IO或者数组中格式化输出。

01

printf 函数族简介

printf 函数是定义在 stdio.h 中的函数,属于C标准库。不同编译器实现过程不同,在这并不会详细描述它的底层实现原理。只针对printf函数族的使用。

printf 函数族共有8个函数:

图片

其中8个函数可分为两大类,每一类中都有一个相互对应。例如:printf 和 vprintf 两个函数为一对。其功能完全一样,不同点在于参数格式。

printf函数参数使用不定参数(...)传递参数,vprintf 使用参数列表(va_list) 传递参数。

02

printf 函数族功能介绍

int printf (const char ** * _format, ...);**

printf是我们使用最多的一个函数,其功能为把格式化之后的字符串输出到标准输出流中。

大多数时候标准输出是控制台的显示,不过在MCU中,我们经常会将标准输出重定向到串口,然后通过串口查看信息

所有printf函数族的返回值是:写入字符串成功返回写入的字符总数,写入失败则返回一个负数。

int sprintf (char * _s, const char * _format, ...);

sprintf 功能与printf 类似,不过它是将字符串格式化输出到它的第一个参数所指定的字符数组中。

由于它是输出到字符数组,则存在数组大小不足或者传递参数非法,导致格式化后的字符溢出的情况,导致缓冲区后面的栈/堆数组被修改。

推荐使用 snprintf 函数代替 sprintf 函数。

int fprintf (FILE _s, const char * _format, ...); *

fprintf 功能与printf 类似,但它的输出是流(FILE *) 中。这个流可以是标准输出(stdout)、标准错误(stderr)或者文件 (FILE *fd)。

也就是说 fprintf 可以直接向系统中文件格式化输出字符串。

int snprintf (FILE _s,size_t size, const char * _format, ...); *

snprintf 是 sprintf 的升级版,它解决了 sprintf 可能存在的缓冲区溢出问题。

它的第一个参数和 sprintf 一样,指定了一个字符数组存放格式化后的字符串,不过在它的第二个参数中指定了缓冲区数组的大小。

如果格式化字符串超过缓冲区数组大小,则进行截断,超出部分不进行输出。

03

printf 参数

接下来是本次的重点:格式化输出的参数。

printf 函数族的格式化参数属性相同,下面以 printf 为例讲解字符串格式属性。

printf 格式化控制属性格式如下:

%[flags][width][.prec][length]type

%[标志][最小宽度][.精度][类型长度]类型

1. type(类型)

type 是格式控制字符的类型,为必选项。在 printf 中会根据类型对应的格式去栈中读取对应大小的数据,务必保证参数类型和参数的数据类型保持一致。

type 支持的类型如下所示:

图片

2. flags(标志)

flags 用于规定输出样式。例如我们有时需要对其打印多个数字,但是数组长度并不是固定的,此时可以使用flag参数进行设置。

例如:左对齐打印四个数字,1,12,123,1234。

图片

flag 支持参数如下:

图片

3. number(宽度)

字符宽度有固定和可变两种类型。固定宽度为在类型前面加一个数字表示宽度:

printf("num is %8dn",1234);

可变宽度类型是指在格式化的宽度可由一个变量来指定,在程序中使用一个星号(*)进行占位,然后在参数中指定宽度。

printf("num is %*dn",8,1234);

图片

4. precision(精度)

精度的属性格式只有一个,对不同类型的效果不同。具体描述见下图:

图片

精度的属性常用在格式化浮点数时使用:

printf("float : %2.3fn",1.23);

输出结果为:float : 1.230

5. length(类型长度)

类型长度用于修饰type(类型)的长度。比如在打印一个 uint64_t 类型的无符号整形数字时,应该使用%llu来进行格式化输出。

其中ll为修饰类型的长度为long long 的整形。

图片

04

结语

printf 函数族是标准输入输出库中的标准输出部分,其还有一个更加强大 scanf 函数族,这个就留给后面有时间在来写了~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7533

    浏览量

    128795
  • 字符串
    +关注

    关注

    1

    文章

    552

    浏览量

    20134
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13481
收藏 人收藏

    评论

    相关推荐

    如何移植C语言printf()函数到51单片机上?

    如何移植C语言printf()函数到51单片机上?有什么方法?怎样去实现在51单片机的串口类pc端的printf()输出?
    发表于 07-15 13:02

    如何去使用printf这个C语言常用的打印输出函数

    如何去实现基于C库的printf函数呢?如何去使用printf这个C语言常用的打印输出
    发表于 11-30 06:41

    printf()函数怎样才能像C语言一样输出打印信息呢

    printf()函数怎样才能像C语言一样输出打印信息呢?
    发表于 12-01 07:58

    重定向printf() 函数

    对于 printf() 函数我们并不陌生,初学C语言使用的第一个函数,其作用是在终端打印显示格式化字符串。但是如果我们使用的是单片机运行
    发表于 01-11 07:01

    printf函数用法示例

    《OpenCV3编程入门》书本配套源代码:printf函数用法示例
    发表于 06-06 15:20 10次下载

    C语言学习笔记之数据类型

    学习C语言时的笔记
    发表于 12-17 16:04 1次下载

    C语言学习笔记之九条语句

    学习C语言时基本语句的笔记
    发表于 12-17 16:04 7次下载

    C语言学习数组的笔记

    C语言学习数组的笔记
    发表于 12-17 16:04 0次下载

    如何学习c语言?C语言学习笔记资料免费下载

    本文档的主要内容详细介绍的是如何学习c语言?C语言学习笔记资料免费下载内容包括了:C语言代码,编译预处理,
    发表于 10-17 16:23 65次下载

    C语言printf格式化输出的实例详细资料说明

    printf 是C语言非常有用的一个函数,也是我们入门学习C语言的第一个函数。掌握
    的头像 发表于 02-24 10:53 4249次阅读

    单片机中printf函数的重映射

    单片机中printf函数的重映射一、源自于:大侠有话说1.如果你在学习单片机之前学过C语言,那么一定知道printf这个
    发表于 11-15 20:51 11次下载
    单片机中<b class='flag-5'>printf</b><b class='flag-5'>函数</b>的重映射

    《51单片机笔记》keilC51软件中printf函数内部机制详解,单片机中怎么使用printf函数printf函数编写程序例子及

    printf函数的讲解
    发表于 11-20 16:51 11次下载
    《51单片机<b class='flag-5'>笔记</b>》keilC51软件中<b class='flag-5'>printf</b><b class='flag-5'>函数</b>内部机制详解,单片机中怎么使用<b class='flag-5'>printf</b><b class='flag-5'>函数</b>,<b class='flag-5'>printf</b><b class='flag-5'>函数</b>编写程序例子及

    通过串口利用printf函数输出数据

    一。printf函数格式printf函数具有强大的输出功能%表示格式化字符串输出目前printf支持以下格式的输出,例如:
    发表于 12-28 19:11 11次下载
    通过串口利用<b class='flag-5'>printf</b><b class='flag-5'>函数</b>输出数据

    STM32中串行通讯中printf函数的使用

    由于最近使用到了串口屏,而它与STM32之间的连接是通过单片机之间的串行通讯实现的,具体而言我利用printf函数给串口屏发送数据,而printf属于C语言库中的
    发表于 12-29 19:31 6次下载
    STM32中串行通讯中<b class='flag-5'>printf</b><b class='flag-5'>函数</b>的使用

    AWorksLP应用笔记:重定向printf函数

    printf函数作为标准库定义的格式化输出方式,本文将介绍其在AWorksLP下默认适配以及重映射至热拔插设备端口的实现。默认适配AWorksLP中默认已经对printf函数完成相关适
    的头像 发表于 11-25 08:24 253次阅读
    AWorksLP应用<b class='flag-5'>笔记</b>:重定向<b class='flag-5'>printf</b><b class='flag-5'>函数</b>