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

    文章

    7597

    浏览量

    136035
  • 字符串
    +关注

    关注

    1

    文章

    576

    浏览量

    20476
  • 函数
    +关注

    关注

    3

    文章

    4299

    浏览量

    62374
  • Printf
    +关注

    关注

    0

    文章

    81

    浏览量

    13617
收藏 人收藏

    评论

    相关推荐

    C语言回调函数学习

    对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调
    发表于 05-27 09:44 7193次阅读

    c语言printf()输出格式大全

    c语言printf()输出格式大全,简洁明了,适合新手观看
    发表于 06-23 18:14 8次下载

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

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

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

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

    C语言学习数组的笔记

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

    实现重定向printf()和scanf() 函数案例分析

    要想printf()和scanf() 函数工作,我们需要把printf()和scanf() 重新定向到串口中。重定向是指用户可以自己重写C 的库函数
    发表于 06-23 08:26 9127次阅读
    实现重定向<b class='flag-5'>printf</b>()和scanf() <b class='flag-5'>函数</b>案例分析

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

    本文档的主要内容详细介绍的是如何学习c语言C语言学习笔记资料免费下载内容包括了:
    发表于 10-17 16:23 66次下载

    C语言学习记录笔记需要的赶紧下载学习

    本文档的主要内容详细介绍的是C语言学习记录笔记需要的赶紧下载学习
    发表于 02-12 08:00 7次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言学习</b>记录<b class='flag-5'>笔记</b>需要的赶紧下载<b class='flag-5'>学习</b>

    C语言学习的相关笔记资料免费下载

    本文档的主要内容详细介绍的是C语言学习的相关笔记资料免费下载。
    发表于 04-16 08:00 16次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言学习</b>的相关<b class='flag-5'>笔记</b>资料免费下载

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

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

    编程世界C语言入门笔记

    语言,所以说学习C语言是进入编程世界的必修课。 hello,world #include《stdio.h》 int main() { /*在双引号中间输入Hello World*/
    的头像 发表于 03-25 14:22 1641次阅读
    编程世界<b class='flag-5'>C</b><b class='flag-5'>语言</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>编写程序例子及

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

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

    C语言和STM32学习的一些学习笔记

    自己总结的一些C语言和STM32F1学习的一些笔记,适合想快速了解学习C
    发表于 03-24 14:53 36次下载

    C语言-函数的可变形参(不定形参)

    这篇文章介绍C语言函数的不定参数、可变参数 形参,实现printf一样的传参效果。
    的头像 发表于 08-14 09:58 2557次阅读