0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言printf函數(shù)族學(xué)習(xí)筆記

CHANBAEK ? 來源:非典型技術(shù)宅 ? 作者:非典型技術(shù)宅 ? 2023-11-24 11:15 ? 次閱讀

printf 函數(shù)族

絮絮叨叨

printf 應(yīng)該是學(xué)習(xí)C語言的第一個函數(shù),我們都知道它是用于字符串格式化輸出的。但是它的用法你真正了解了嗎?

printf 系列函數(shù)不僅僅可用用來打印字符串到控制臺,還可以向其他標(biāo)準(zhǔn)IO或者數(shù)組中格式化輸出。

01

printf 函數(shù)族簡介

printf 函數(shù)是定義在 stdio.h 中的函數(shù),屬于C標(biāo)準(zhǔn)庫。不同編譯器實現(xiàn)過程不同,在這并不會詳細(xì)描述它的底層實現(xiàn)原理。只針對printf函數(shù)族的使用。

printf 函數(shù)族共有8個函數(shù):

圖片

其中8個函數(shù)可分為兩大類,每一類中都有一個相互對應(yīng)。例如:printf 和 vprintf 兩個函數(shù)為一對。其功能完全一樣,不同點在于參數(shù)格式。

printf函數(shù)參數(shù)使用不定參數(shù)(...)傳遞參數(shù),vprintf 使用參數(shù)列表(va_list) 傳遞參數(shù)。

02

printf 函數(shù)族功能介紹

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

printf是我們使用最多的一個函數(shù),其功能為把格式化之后的字符串輸出到標(biāo)準(zhǔn)輸出流中。

大多數(shù)時候標(biāo)準(zhǔn)輸出是控制臺的顯示,不過在MCU中,我們經(jīng)常會將標(biāo)準(zhǔn)輸出重定向到串口,然后通過串口查看信息。

所有printf函數(shù)族的返回值是:寫入字符串成功返回寫入的字符總數(shù),寫入失敗則返回一個負(fù)數(shù)。

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

sprintf 功能與printf 類似,不過它是將字符串格式化輸出到它的第一個參數(shù)所指定的字符數(shù)組中。

由于它是輸出到字符數(shù)組,則存在數(shù)組大小不足或者傳遞參數(shù)非法,導(dǎo)致格式化后的字符溢出的情況,導(dǎo)致緩沖區(qū)后面的棧/堆數(shù)組被修改。

推薦使用 snprintf 函數(shù)代替 sprintf 函數(shù)。

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

fprintf 功能與printf 類似,但它的輸出是流(FILE *) 中。這個流可以是標(biāo)準(zhǔn)輸出(stdout)、標(biāo)準(zhǔn)錯誤(stderr)或者文件 (FILE *fd)。

也就是說 fprintf 可以直接向系統(tǒng)中文件格式化輸出字符串。

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

snprintf 是 sprintf 的升級版,它解決了 sprintf 可能存在的緩沖區(qū)溢出問題。

它的第一個參數(shù)和 sprintf 一樣,指定了一個字符數(shù)組存放格式化后的字符串,不過在它的第二個參數(shù)中指定了緩沖區(qū)數(shù)組的大小。

如果格式化字符串超過緩沖區(qū)數(shù)組大小,則進(jìn)行截斷,超出部分不進(jìn)行輸出。

03

printf 參數(shù)

接下來是本次的重點:格式化輸出的參數(shù)。

printf 函數(shù)族的格式化參數(shù)屬性相同,下面以 printf 為例講解字符串格式屬性。

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

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

%[標(biāo)志][最小寬度][.精度][類型長度]類型

1. type(類型)

type 是格式控制字符的類型,為必選項。在 printf 中會根據(jù)類型對應(yīng)的格式去棧中讀取對應(yīng)大小的數(shù)據(jù),務(wù)必保證參數(shù)類型和參數(shù)的數(shù)據(jù)類型保持一致。

type 支持的類型如下所示:

圖片

2. flags(標(biāo)志)

flags 用于規(guī)定輸出樣式。例如我們有時需要對其打印多個數(shù)字,但是數(shù)組長度并不是固定的,此時可以使用flag參數(shù)進(jìn)行設(shè)置。

例如:左對齊打印四個數(shù)字,1,12,123,1234。

圖片

flag 支持參數(shù)如下:

圖片

3. number(寬度)

字符寬度有固定和可變兩種類型。固定寬度為在類型前面加一個數(shù)字表示寬度:

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

可變寬度類型是指在格式化的寬度可由一個變量來指定,在程序中使用一個星號(*)進(jìn)行占位,然后在參數(shù)中指定寬度。

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

圖片

4. precision(精度)

精度的屬性格式只有一個,對不同類型的效果不同。具體描述見下圖:

圖片

精度的屬性常用在格式化浮點數(shù)時使用:

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

輸出結(jié)果為:float : 1.230

5. length(類型長度)

類型長度用于修飾type(類型)的長度。比如在打印一個 uint64_t 類型的無符號整形數(shù)字時,應(yīng)該使用%llu來進(jìn)行格式化輸出。

其中l(wèi)l為修飾類型的長度為long long 的整形。

圖片

04

結(jié)語

printf 函數(shù)族是標(biāo)準(zhǔn)輸入輸出庫中的標(biāo)準(zhǔn)輸出部分,其還有一個更加強大 scanf 函數(shù)族,這個就留給后面有時間在來寫了~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135857
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    575

    瀏覽量

    20468
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
  • Printf
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    13608
收藏 人收藏

    評論

    相關(guān)推薦

    C語言回調(diào)函數(shù)學(xué)習(xí)

    對指針的應(yīng)用是C語言編程的精髓所在,而回調(diào)函數(shù)就是C語言里面對函數(shù)指針的高級應(yīng)用。簡而言之,回調(diào)
    發(fā)表于 05-27 09:44 ?7190次閱讀

    c語言printf()輸出格式大全

    c語言printf()輸出格式大全,簡潔明了,適合新手觀看
    發(fā)表于 06-23 18:14 ?8次下載

    C語言學(xué)習(xí)筆記之?dāng)?shù)據(jù)類型

    學(xué)習(xí)C語言時的筆記
    發(fā)表于 12-17 16:04 ?1次下載

    C語言學(xué)習(xí)筆記之九條語句

    學(xué)習(xí)C語言時基本語句的筆記
    發(fā)表于 12-17 16:04 ?7次下載

    C語言學(xué)習(xí)數(shù)組的筆記

    C語言學(xué)習(xí)數(shù)組的筆記
    發(fā)表于 12-17 16:04 ?0次下載

    實現(xiàn)重定向printf()和scanf() 函數(shù)案例分析

    要想printf()和scanf() 函數(shù)工作,我們需要把printf()和scanf() 重新定向到串口中。重定向是指用戶可以自己重寫C 的庫函數(shù)
    發(fā)表于 06-23 08:26 ?9114次閱讀
    實現(xiàn)重定向<b class='flag-5'>printf</b>()和scanf() <b class='flag-5'>函數(shù)</b>案例分析

    如何學(xué)習(xí)c語言?C語言學(xué)習(xí)筆記資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何學(xué)習(xí)c語言?C語言學(xué)習(xí)筆記資料免費下載內(nèi)容包括了:
    發(fā)表于 10-17 16:23 ?66次下載

    C語言學(xué)習(xí)記錄筆記需要的趕緊下載學(xué)習(xí)

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言學(xué)習(xí)記錄筆記需要的趕緊下載學(xué)習(xí)。
    發(fā)表于 02-12 08:00 ?7次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言學(xué)習(xí)</b>記錄<b class='flag-5'>筆記</b>需要的趕緊下載<b class='flag-5'>學(xué)習(xí)</b>

    C語言學(xué)習(xí)的相關(guān)筆記資料免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言學(xué)習(xí)的相關(guān)筆記資料免費下載。
    發(fā)表于 04-16 08:00 ?16次下載
    <b class='flag-5'>C</b><b class='flag-5'>語言學(xué)習(xí)</b>的相關(guān)<b class='flag-5'>筆記</b>資料免費下載

    C語言printf格式化輸出的實例詳細(xì)資料說明

    printfC語言非常有用的一個函數(shù),也是我們?nèi)腴T學(xué)習(xí)C
    的頭像 發(fā)表于 02-24 10:53 ?4597次閱讀

    編程世界C語言入門筆記

    語言,所以說學(xué)習(xí)C語言是進(jìn)入編程世界的必修課。 hello,world #include《stdio.h》 int main() { /*在雙引號中間輸入Hello World*/
    的頭像 發(fā)表于 03-25 14:22 ?1635次閱讀
    編程世界<b class='flag-5'>C</b><b class='flag-5'>語言</b>入門<b class='flag-5'>筆記</b>

    《51單片機(jī)筆記》keilC51軟件中printf函數(shù)內(nèi)部機(jī)制詳解,單片機(jī)中怎么使用printf函數(shù),printf函數(shù)編寫程序例子及

    printf函數(shù)的講解
    發(fā)表于 11-20 16:51 ?11次下載
    《51單片機(jī)<b class='flag-5'>筆記</b>》keilC51軟件中<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>內(nèi)部機(jī)制詳解,單片機(jī)中怎么使用<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>,<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>編寫程序例子及

    STM32中串行通訊中printf函數(shù)的使用

    由于最近使用到了串口屏,而它與STM32之間的連接是通過單片機(jī)之間的串行通訊實現(xiàn)的,具體而言我利用printf函數(shù)給串口屏發(fā)送數(shù)據(jù),而printf屬于C
    發(fā)表于 12-29 19:31 ?6次下載
    STM32中串行通訊中<b class='flag-5'>printf</b><b class='flag-5'>函數(shù)</b>的使用

    C語言和STM32學(xué)習(xí)的一些學(xué)習(xí)筆記

    自己總結(jié)的一些C語言和STM32F1學(xué)習(xí)的一些筆記,適合想快速了解學(xué)習(xí)C
    發(fā)表于 03-24 14:53 ?36次下載

    C語言-函數(shù)的可變形參(不定形參)

    這篇文章介紹C語言函數(shù)的不定參數(shù)、可變參數(shù) 形參,實現(xiàn)printf一樣的傳參效果。
    的頭像 發(fā)表于 08-14 09:58 ?2547次閱讀