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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用printf函數的安全隱患

我快閉嘴 ? 來源:C語言學習聯盟 ? 作者:C語言學習聯盟 ? 2022-10-09 09:49 ? 次閱讀

程序員都知道,也都會使用printf函數,但你知道它也有“安全隱患”嗎?

下面就來舉例我說說:

1問題描述

打印輸出的數據并不是理論值,如下圖(右邊):

2acc8ea2-3b2b-11ed-9e49-dac502259ad0.png

2進一步描述問題

請細致注意看下面代碼,有如以下奇怪的現象:

int a=5;floatx=a;     //這里轉換是沒有問題的。%f打印x是 5.000000
printf("%d
",a);printf("%f
",a);  //輸出為什么是0.000000?-----問題1printf("%f
",x);printf("%d
",x);  //輸出為什么是0?-----問題2printf("%f,%f
",a,x);  //輸出都是0.000000  為什么?   ----問題3printf("%f,%f
",x,a);  //調換一下a,x的順序,正常了,為什么?----問題4printf("%d,%f
",a,x);
getchar();return0;

這里有四個問題,下面會進行解答。

3printf()函數的原理解釋

明確這些問題首先須要明確printf()函數的工作原理

printf()維持了一個需要打印的變量棧,默認情況下,參數進棧的順序是由右向左的。因此,參數進棧以后的內存模型例如以下圖所看到的:

2af733dc-3b2b-11ed-9e49-dac502259ad0.png

打印的時候,printf依照字符轉換說明符規(guī)定的格式從低地址開始提取數據。直到參數打印完。

比方遇到 %f 說明符就提取8個字節(jié)的數據,遇到 %d 就提取4個字節(jié)。printf()事實上不知道參數的個數,它僅僅會依據format中的打印格式的數目依次打印堆棧中參數format后面地址的內容。

這樣一來,printf()事實上存在安全隱患:它會強行讀取內存的數據當作正常數據輸出,沒有邊界檢測(非常有可能產生堆溢出)。

比如這種代碼:

char string[]="Hello World!";printf("String: %s  ,強行再讀一次: %#p
", string);printf("String: %s  ,強行再讀一次: %#s
", string);
輸出如下:

String:Hello World!  , 強行再讀一次: 0X001C1073 
String: Hello World!  ,強行再讀一次: 閮

4問題解釋

問題1:printf("%f ",a) 輸出為什么是0.000000?

答:%f 提取8字節(jié)。a僅僅有4字節(jié),提取出來的數占了float表示法的指數部分。尾數部分為0。所以終于是0

問題2:printf("%d ",x) 輸出為什么是0?

答:%d 提取4字節(jié),x有8字節(jié)。提取出來的數實際上是float表示法的指數部分(恰好是0),所以終于是0

問題3:printf("%f,%f ",a,x); 輸出都是0.000000 為什么?

答:參照問題1的解釋。提取了八字節(jié)后,后面的已經亂了

問題4:printf("%f,%f ",x,a);調換一下a,x的順序,正常了,為什么?

答:這是正常的情況而已。

審核編輯:湯梓紅

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

    關注

    3

    文章

    4277

    瀏覽量

    62323
  • Printf
    +關注

    關注

    0

    文章

    81

    瀏覽量

    13608

原文標題:C語言printf()函數具體解釋和安全隱患

文章出處:【微信號:C語言學習聯盟,微信公眾號:C語言學習聯盟】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    盤點近來鋰電池的安全隱患事故

    鋰電池的安全隱患一直都有存在,從手機、筆記本到電動汽車,均有鋰電池發(fā)熱甚至起火的事件發(fā)生,并且這一現象不再只發(fā)生在山寨電子產品中,許多鋰電池的安全隱患事故,已經牽扯到了諸如尼康、松下、三星、小米、聯想、特斯拉等國內外的品牌公司。
    發(fā)表于 06-04 09:44 ?8778次閱讀

    網絡安全隱患的分析

    、管理網絡安全等方面?! ∥锢砭W絡安全風險物理網絡安全的風險是多種多樣的。網絡的物理安全主要是指地震、水災、火災等環(huán)境事故,電源故障、人為操作失誤或錯誤,設備被盜、被毀,電磁干擾、線路
    發(fā)表于 10-25 10:21

    [分享] Ghost真的是存在很大的安全隱患

    ://www.pgos.cc 如果你說ghost win7這種操作系統(tǒng)存在很大的安全隱患,這就是錯誤的了,因為在實際之上這種操作系統(tǒng)是經過了我們反復的測試了,需要知道的一點就是ghost操作系統(tǒng)開發(fā)社區(qū)可能是會在我們的系統(tǒng)之中加入一些自己喜歡的程序或者是功能,但是這些都是無害的,更何況我們也是可以自己實現卸載。
    發(fā)表于 01-16 14:28

    面粉灑到插排里 會不會有安全隱患

    不小心把面粉撒到插排里了 已經清理完了 不知道還會不會有安全隱患
    發(fā)表于 07-10 13:36

    電氣安全隱患的監(jiān)控管理

    智慧安全用電監(jiān)控系統(tǒng)電壓、電流數據變化在線監(jiān)測單回路剩余電流、多回路剩余電流(漏電)在線監(jiān)測 導線銅排溫度在線監(jiān)測 故障電弧在線探測 消防設備電源狀態(tài)在線監(jiān)測。智慧式用電安全隱患監(jiān)管服務系統(tǒng)由用電
    發(fā)表于 08-22 10:49

    VR一體機家庭消防安全隱患排查內容

    體驗過程中,用戶置身于“真實”的生活場景(如家庭、宿舍、辦公室等),通過系統(tǒng)提示學習消防隱患的科普知識,讓參與者進一步增強在日常生活中自覺地做好自家消防安全隱患排查工作,從而起到積極正面的教學目的
    發(fā)表于 09-10 17:31

    請問家里電路可以這樣設計嗎,有沒什么安全隱患?

    那位老師傅可以幫小弟看下,家里電路這樣設計可否,有沒什么安全隱患。。主要是家里配電箱已經固定,只有18個槽位、、
    發(fā)表于 04-03 13:37

    安全隱患檢測系統(tǒng)的設計與實現

    隨著網絡技術的迅速發(fā)展,網絡安全已經成為人們關注的焦點。安全隱患檢測技術可以協助決策者及早發(fā)現網絡的脆弱性,防患于未然。文章描述了安全隱患檢測系統(tǒng)的原理和體
    發(fā)表于 06-15 11:01 ?13次下載

    RFID技術詳解與基于RFID的物聯網安全隱患的研究

    安全隱患的研究已經成為一個迫在眉睫和廣為關注的問題。在此對RFID技術、RFID系統(tǒng)組戍、工作原理以及對基于RFID技術的物聯網構成要素進行了分析;同時對造成物聯網潛在與安全隱患產生的主要原因、主要攻擊方式、安全策略進行了研究。
    發(fā)表于 10-25 11:08 ?10次下載

    指紋鎖的安全隱患_指紋鎖的優(yōu)缺點

    指紋鎖安全隱患有哪些?指紋門鎖安全隱患盤點。想要家里安全過得舒心,“門鎖”的重要性是擺在第一位。然而,現實生活中人們常常會面臨忘帶鑰匙的尷尬,因此鎖具廠商會尋求更便捷的開門方式,于是智能鎖在家庭市場熱了起來。指紋鎖是目前非常常見
    發(fā)表于 06-03 11:33 ?2.2w次閱讀

    關于那些智能電動汽車的安全隱患

    文章較長,分為三個大部分,按照安全隱患的感知程度分類。首先是駕駛員易于感知到的安全隱患,其次是駕駛員不易于感知的,最后再說對駕駛員而言透明的安全隱患。 駕駛員易于感知的安全隱患 1、“
    的頭像 發(fā)表于 01-14 10:13 ?5267次閱讀
    關于那些智能電動汽車的<b class='flag-5'>安全隱患</b>

    機房的安全隱患該如何消除

    機房的安全隱患--供電問題 雖然機房的電源問題眾所周知,但在實際工作中沒有得到足夠的重視,這種情況經常發(fā)生。如果ups或ups電池在日常使用中損壞,如果發(fā)生電源故障,所有設備將立即停止,網絡設備
    發(fā)表于 01-19 09:57 ?691次閱讀

    如何預防電力故障及安全隱患

    電力故障和安全隱患一直是人們關注的熱點問題。在現代社會中,電力已經成為人們生活和工作中不可或缺的一部分。然而,隨著電力設備的增加和用電負荷的增大,電力故障和安全隱患也隨之增加。那么如何預防電力故障及安全隱患呢?高壓電纜故障及
    的頭像 發(fā)表于 08-29 13:51 ?776次閱讀

    無損檢測有哪些安全隱患

    無損檢測技術在航空、航天、核電、石油、化工、機械制造等領域具有重要應用。然而,由于操作不當、設備故障、環(huán)境因素等原因,無損檢測過程中可能存在安全隱患。本文將詳細分析無損檢測中的安全隱患,并提出相應
    的頭像 發(fā)表于 05-27 14:58 ?1366次閱讀

    直流充電樁使用中有哪些電氣安全隱患及解決方案

    充電樁。然而,在充電樁的日常使用中,一些潛在的安全隱患也逐漸浮出水面,這些隱患有可能對人們的生命與財產安全構成嚴重威脅。因此,深刻認識并了解這些常見的充電樁安全隱患,以及如何通過嚴格的
    的頭像 發(fā)表于 10-30 15:22 ?93次閱讀
    直流充電樁使用中有哪些電氣<b class='flag-5'>安全隱患</b>及解決方案