在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7615

    瀏覽量

    137827
  • 字符串
    +關注

    關注

    1

    文章

    585

    瀏覽量

    20612
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    63012
  • Printf
    +關注

    關注

    0

    文章

    83

    瀏覽量

    13742
收藏 人收藏

    評論

    相關推薦

    C語言回調函數學習

    對指針的應用是C語言編程的精髓所在,而回調函數就是C語言里面對函數指針的高級應用。簡而言之,回調
    發表于 05-27 09:44 ?7229次閱讀

    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 ?9334次閱讀
    實現重定向<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 ?4773次閱讀

    編程世界C語言入門筆記

    語言,所以說學習C語言是進入編程世界的必修課。 hello,world #include《stdio.h》 int main() { /*在雙引號中間輸入Hello World*/
    的頭像 發表于 03-25 14:22 ?1716次閱讀
    編程世界<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 ?2783次閱讀
    主站蜘蛛池模板: 天天视频免费观看高清影视 | 欧美色综合网站 | 中文天堂在线最新2022更新 | 欧洲色妇| 性欧美zoz0另类xxxx | 欧美.成人.综合在线 | 国产精品久久久久久久久齐齐 | 亚洲资源在线播放 | 婷婷六月丁香色婷婷网 | 性欧美大战久久久久久久野外 | 三级在线免费观看 | 高清成人| 国产逼逼视频 | 国产美女叼嘿视频免费看 | 色香蕉色香蕉在线视频 | 一区二区福利 | 欧美亚洲网站 | aaaaa国产毛片 | 夜夜爽天天爽 | 明星三级国产免费播放 | 欧美一级视频在线 | 久久精品亚瑟全部免费观看 | 男人午夜天堂 | 激情网五月 | 国模大尺度人体一区 | 日本一区二区三区不卡在线看 | 天天天天做夜夜夜做 | 超级毛片 | 伊人久操 | 免费看真人a一级毛片 | 亚洲国产日韩欧美在线as乱码 | 女人张开腿等男人桶免费视频 | 日本免费色网站 | 欧美三级第一页 | 奇米网狠狠干 | 国产视频黄 | 国产情侣草莓视频在线 | 老司机色网 | 岛国一级毛片 | 免费观看老外特级毛片 | 夜夜操夜夜摸 |