91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

C語(yǔ)言常見錯(cuò)誤:數(shù)組越界及其避免方法

Q4MP_gh_c472c21 ? 來源:嵌入式ARM ? 作者:嵌入式ARM ? 2020-12-06 09:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

所謂的數(shù)組越界,簡(jiǎn)單地講就是指數(shù)組下標(biāo)變量的取值超過了初始定義時(shí)的大小,導(dǎo)致對(duì)數(shù)組元素的訪問出現(xiàn)在數(shù)組的范圍之外,這類錯(cuò)誤也是 C 語(yǔ)言程序中最常見的錯(cuò)誤之一。

在 C 語(yǔ)言中,數(shù)組必須是靜態(tài)的。換而言之,數(shù)組的大小必須在程序運(yùn)行前就確定下來。由于 C 語(yǔ)言并不具有類似 Java 等語(yǔ)言中現(xiàn)有的靜態(tài)分析工具的功能,可以對(duì)程序中數(shù)組下標(biāo)取值范圍進(jìn)行嚴(yán)格檢查,一旦發(fā)現(xiàn)數(shù)組上溢或下溢,都會(huì)因拋出異常而終止程序。也就是說,C 語(yǔ)言并不檢驗(yàn)數(shù)組邊界,數(shù)組的兩端都有可能越界,從而使其他變量的數(shù)據(jù)甚至程序代碼被破壞。

因此,數(shù)組下標(biāo)的取值范圍只能預(yù)先推斷一個(gè)值來確定數(shù)組的維數(shù),而檢驗(yàn)數(shù)組的邊界是程序員的職責(zé)。

一般情況下,數(shù)組的越界錯(cuò)誤主要包括兩種:數(shù)組下標(biāo)取值越界與指向數(shù)組的指針的指向范圍越界。

數(shù)組下標(biāo)取值越界

數(shù)組下標(biāo)取值越界主要是指訪問數(shù)組的時(shí)候,下標(biāo)的取值不在已定義好的數(shù)組的取值范圍內(nèi),而訪問的是無(wú)法獲取的內(nèi)存地址。例如,對(duì)于數(shù)組int a[3],它的下標(biāo)取值范圍是[0,2](即a[0]、a[1] 與 a[2])。如果我們的取值不在這個(gè)范圍內(nèi)(如 a[3]),就會(huì)發(fā)生越界錯(cuò)誤。示例代碼如下所示:

很顯然,在上面的示例程序中,訪問 a[3] 是非法的,將會(huì)發(fā)生越界錯(cuò)誤。因此,我們應(yīng)該將上面的代碼修改成如下形式:

指向數(shù)組的指針的指向范圍越界

指向數(shù)組的指針的指向范圍越界是指定義數(shù)組時(shí)會(huì)返回一個(gè)指向第一個(gè)變量的頭指針,對(duì)這個(gè)指針進(jìn)行加減運(yùn)算可以向前或向后移動(dòng)這個(gè)指針,進(jìn)而訪問數(shù)組中所有的變量。但在移動(dòng)指針時(shí),如果不注意移動(dòng)的次數(shù)和位置,會(huì)使指針指向數(shù)組以外的位置,導(dǎo)致數(shù)組發(fā)生越界錯(cuò)誤。下面的示例代碼就是移動(dòng)指針時(shí)沒有考慮到移動(dòng)的次數(shù)和數(shù)組的范圍,從而使程序訪問了數(shù)組以外的存儲(chǔ)單元。

在上面的示例代碼中,for 循環(huán)會(huì)使指針 p 向后移動(dòng) 10 次,并且每次向指針指向的單元賦值。但是,這里數(shù)組 a 的下標(biāo)取值范圍是[0,4](即a[0]、a[1]、a[2]、a[3] 與 a[4])。因此,后 5 次的操作會(huì)對(duì)未知的內(nèi)存區(qū)域賦值,而這種向內(nèi)存未知區(qū)域賦值的操作會(huì)使系統(tǒng)發(fā)生錯(cuò)誤。正確的操作應(yīng)該是指針移動(dòng)的次數(shù)與數(shù)組中的變量個(gè)數(shù)相同,如下面的代碼所示:

為了加深大家對(duì)數(shù)組越界的了解,下面通過一段完整的數(shù)組越界示例來演示編程中數(shù)組越界將會(huì)導(dǎo)致哪些問題。

上面的示例代碼模擬了一個(gè)密碼驗(yàn)證的例子,它將用戶輸入的密碼與宏定義中的密碼123456進(jìn)行比較。很顯然,本示例中最大的設(shè)計(jì)漏洞就在于 Test() 函數(shù)中的strcpy(buffer,str)調(diào)用。

由于程序?qū)⒂脩糨斎氲淖址獠粍?dòng)地復(fù)制到 Test() 函數(shù)的數(shù)組char buffer[7]中。因此,當(dāng)用戶的輸入大于 7 個(gè)字符的緩沖區(qū)尺寸時(shí),就會(huì)發(fā)生數(shù)組越界錯(cuò)誤,這也就是大家所謂的緩沖區(qū)溢出Buffer overflow漏洞。

但是要注意,如果這個(gè)時(shí)候我們根據(jù)緩沖區(qū)溢出發(fā)生的具體情況填充緩沖區(qū),不但可以避免程序崩潰,還會(huì)影響到程序的執(zhí)行流程,甚至?xí)尦绦蛉?zhí)行緩沖區(qū)里的代碼。示例運(yùn)行結(jié)果為:

在示例代碼中,flag 變量實(shí)際上是一個(gè)標(biāo)志變量,其值將決定著程序是進(jìn)入密碼錯(cuò)誤的流程(非 0)還是“密碼正確”的流程(0)。當(dāng)我們輸入錯(cuò)誤的字符串1234567或者aaaaaaa,程序也都會(huì)輸出“密碼正確”。但在輸入0123456的時(shí)候,程序卻輸出“密碼錯(cuò)誤”,這究竟是為什么呢?

其實(shí),原因很簡(jiǎn)單。當(dāng)調(diào)用 Test() 函數(shù)時(shí),系統(tǒng)將會(huì)給它分配一片連續(xù)的內(nèi)存空間,而變量char buffer[7]與int flag將會(huì)緊挨著進(jìn)行存儲(chǔ),用戶輸入的字符串將會(huì)被復(fù)制進(jìn) buffer[7] 中。如果這個(gè)時(shí)候,我們輸入的字符串?dāng)?shù)量超過 6 個(gè)(注意,有字符串截?cái)喾菜阋粋€(gè)),那么超出的部分將破壞掉與它緊鄰著的 flag 變量的內(nèi)容。

當(dāng)輸入的密碼不是宏定義的123456時(shí),字符串比較將返回 1 或 -1。我們都知道,內(nèi)存中的數(shù)據(jù)按照 4 字節(jié)(DWORD)逆序存儲(chǔ),所以當(dāng) flag 為 1 時(shí),在內(nèi)存中存儲(chǔ)的是0x01000000。如果我們輸入包含 7 個(gè)字符的錯(cuò)誤密碼,如aaaaaaa,那么字符串截?cái)喾?0x00 將寫入 flag 變量,這樣溢出數(shù)組的一個(gè)字節(jié) 0x00 將恰好把逆序存放的 flag 變量改為0x00000000。在函數(shù)返回后,一旦 main 函數(shù)的 flag 為 0,就會(huì)輸出“密碼正確”。這樣,我們就用錯(cuò)誤的密碼得到了正確密碼的運(yùn)行效果。

而對(duì)于0123456,因?yàn)樵谶M(jìn)行字符串的大小比較時(shí),它小于123456,flag的值是 -1,在內(nèi)存中將按照補(bǔ)碼存放負(fù)數(shù),所以實(shí)際存儲(chǔ)的不是0x01000000而是0xffffffff。那么字符串截?cái)嗪蠓?0x00 淹沒后,變成0x00ffffff,還是非 0,所以沒有進(jìn)入正確分支。

其實(shí),本示例只是用一個(gè)字節(jié)淹沒了鄰接變量,導(dǎo)致程序進(jìn)入密碼正確的處理流程,使設(shè)計(jì)的驗(yàn)證功能失效。

盡量顯式地指定數(shù)組的邊界

在 C 語(yǔ)言中,為了提高運(yùn)行效率,給程序員更大的空間,為指針操作帶來更多的方便,C 語(yǔ)言內(nèi)部本身不檢查數(shù)組下標(biāo)表達(dá)式的取值是否在合法范圍內(nèi),也不檢查指向數(shù)組元素的指針是不是移出了數(shù)組的合法區(qū)域。因此,在編程中使用數(shù)組時(shí)就必須格外謹(jǐn)慎,在對(duì)數(shù)組進(jìn)行讀寫操作時(shí)都應(yīng)當(dāng)進(jìn)行相應(yīng)的檢查,以免對(duì)數(shù)組的操作超過數(shù)組的邊界,從而發(fā)生緩沖區(qū)溢出漏洞。

除此之外,在 C99 標(biāo)準(zhǔn)中,還允許我們使用單個(gè)指示符為數(shù)組的兩段“分配”空間,如下面的代碼所示:

在上面的a[MAX]數(shù)組中,如果 MAX 大于 10,數(shù)組中間將用 0 值元素進(jìn)行填充(填充的個(gè)數(shù)為MAX-10,并從 a[5] 開始進(jìn)行 0 值填充);如果 MAX 小于 10,[MAX-5]之前的 5 個(gè)元素(1,2,3,4,5)中將有幾個(gè)被[MAX-5]之后的 5 個(gè)元素(6,7,8,9,10)所覆蓋,示例代碼如下所示:

運(yùn)行結(jié)果為:

對(duì)數(shù)組做越界檢查,確保索引值位于合法的范圍之內(nèi)

要避免數(shù)組越界,除了上面所闡述的顯式指定數(shù)組的邊界之外,還可以在數(shù)組使用之前進(jìn)行越界檢查,檢查數(shù)組的界限和字符串(也以數(shù)組的方式存放)的結(jié)束,以保證數(shù)組索引值位于合法的范圍之內(nèi)。例如,在寫處理數(shù)組的函數(shù)時(shí),一般應(yīng)該有一個(gè)范圍參數(shù);在處理字符串時(shí)總檢查是否遇到空字符‘’。

來看下面一段代碼示例:

從上面的int*TestArray(int num,int value)函數(shù)中不難看出,其中存在著一個(gè)很明顯的問題,那就是無(wú)法保證 num 參數(shù)是否越界(即當(dāng)num>=ARRAY_NUM的情況)。因此,應(yīng)該對(duì) num 參數(shù)進(jìn)行越界檢查,示例代碼如下所示:

這樣通過if(num

但是,如果仔細(xì)檢查,TestArray() 函數(shù)仍然還存在一個(gè)致命的問題,那就是沒有檢查數(shù)組的下界。由于這里的 num 參數(shù)類型是 int 類型,因此可能為負(fù)數(shù)。如果 num 參數(shù)所傳遞的值為負(fù)數(shù),將導(dǎo)致在 arr 所引用的內(nèi)存邊界之外進(jìn)行寫入。

當(dāng)然,你可以通過向if(num

但是,這樣的函數(shù)形式對(duì)調(diào)用者來說是不友好的(由于 int 類型的原因,對(duì)調(diào)用者來說仍然可以傳遞負(fù)數(shù),至于在函數(shù)中怎么處理那是另外一件事情),因此,最佳的解決方案是將 num 參數(shù)聲明為 size_t 類型,從根本上防止它傳遞負(fù)數(shù),示例代碼如下所示:

獲取數(shù)組的長(zhǎng)度時(shí)不要對(duì)指針應(yīng)用 sizeof 操作符

在 C 語(yǔ)言中,sizeof 這個(gè)其貌不揚(yáng)的家伙經(jīng)常會(huì)讓無(wú)數(shù)程序員叫苦連連。同時(shí),它也是各大公司爭(zhēng)相選用的面試必備題目。簡(jiǎn)單地講,sizeof 是一個(gè)單目操作符,不是函數(shù)。其作用就是返回一個(gè)操作數(shù)所占的內(nèi)存字節(jié)數(shù)。其中,操作數(shù)可以是一個(gè)表達(dá)式或括在括號(hào)內(nèi)的類型名,操作數(shù)的存儲(chǔ)大小由操作數(shù)的類型來決定。例如,對(duì)于數(shù)組int a[5],可以使用sizeof(a)來獲取數(shù)組的長(zhǎng)度,使用sizeof(a[0])來獲取數(shù)組元素的長(zhǎng)度。

但需要注意的是,sizeof 操作符不能用于函數(shù)類型、不完全類型(指具有未知存儲(chǔ)大小的數(shù)據(jù)類型,如未知存儲(chǔ)大小的數(shù)組類型、未知內(nèi)容的結(jié)構(gòu)或聯(lián)合類型、void 類型等)與位字段。例如,以下都是不正確形式:

了解 sizeof 操作符之后,現(xiàn)在來看下面的示例代碼:

從表面看,上面代碼的輸出結(jié)果應(yīng)該是0,1,2,3,4,5,6,7,8,9,但實(shí)際結(jié)果卻出乎我們的意料,如圖 1 所示。

圖 1 示例代碼在 VC++2010 中的運(yùn)行結(jié)果

是什么原因?qū)е逻@個(gè)結(jié)果呢?

很顯然,上面的示例代碼在void Init(int arr[])函數(shù)中接收了一個(gè)int arr[]類型的形參,并且在main函數(shù)中向它傳遞一個(gè)a[10]實(shí)參。同時(shí),在 Init() 函數(shù)中通過sizeof(arr)/sizeof(arr[0])來確定這個(gè)數(shù)組元素的數(shù)量和初始化值。

在這里出現(xiàn)了一個(gè)很大問題:由于 arr 參數(shù)是一個(gè)形參,它是一個(gè)指針類型,其結(jié)果是sizeof(arr)=sizeof(int*)。在 IA-32 中,sizeof(arr)/sizeof(arr[0])的結(jié)果為 1。因此,最后的結(jié)果如圖 1 所示。

對(duì)于上面的示例代碼,我們可以通過傳入數(shù)組的長(zhǎng)度的方式來解決這個(gè)問題,示例代碼如下:

除此之外,我們還可以通過指針的方式來解決上面的問題,示例代碼如下所示:

現(xiàn)在,Init() 函數(shù)中的 arr 參數(shù)是一個(gè)指向arr[10]類型的指針。需要特別注意的是,這里絕對(duì)不能夠使用void Init(int(*arr)[])來聲明函數(shù),而是必須指明要傳入的數(shù)組的大小,否則sizeof(*arr)無(wú)法計(jì)算。但是在這種情況下,再通過 sizeof 來計(jì)算數(shù)組大小已經(jīng)沒有意義了,因?yàn)榇藭r(shí)數(shù)組大小已經(jīng)指定為 10 了。

責(zé)任編輯:xj

原文標(biāo)題:數(shù)組越界及其避免方法,C語(yǔ)言數(shù)組越界詳解

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    183

    文章

    7644

    瀏覽量

    145642
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27371

原文標(biāo)題:數(shù)組越界及其避免方法,C語(yǔ)言數(shù)組越界詳解

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    燒錄芯片總失???五大常見錯(cuò)誤與解決方法

    產(chǎn)線常見 Verify Error 校驗(yàn)錯(cuò)誤,多非芯片本身問題,而是五大典型因素導(dǎo)致:燒錄座接觸不良、電源供電不穩(wěn)、信號(hào)與時(shí)序異常、加密保護(hù)誤觸、靜電與溫度影響。按物理連接、電氣環(huán)境、軟件配置逐級(jí)排查,規(guī)范耗材更換與產(chǎn)線防護(hù),可顯著提升燒錄良率與穩(wěn)定性。
    的頭像 發(fā)表于 02-24 15:37 ?843次閱讀

    容易造成單片機(jī)內(nèi)存溢出的幾個(gè)陷阱介紹

    關(guān)于程序變量和內(nèi)存分配,都是需要我們時(shí)刻關(guān)注的問題。我相信有不少人在這塊犯過很多的錯(cuò)誤,也可能說明我們基礎(chǔ)不夠扎實(shí),編寫程序的習(xí)慣也不夠好。 總結(jié)一下關(guān)于程序的變量和內(nèi)存方面的概念,雖然是屬于C語(yǔ)言
    發(fā)表于 01-23 07:25

    C編譯器錯(cuò)誤與解決方法

    C語(yǔ)言keil編譯器提示錯(cuò)誤的解決方法,可以幫你解決程序編譯中的煩惱!! C編譯器錯(cuò)誤與解決
    發(fā)表于 01-22 08:03

    keil中c語(yǔ)言的動(dòng)態(tài)分配內(nèi)存

    進(jìn)行判斷,所以他可能是空指針(當(dāng)malloc動(dòng)態(tài)內(nèi)存開辟失敗時(shí)),這時(shí)就會(huì)產(chǎn)生對(duì)空指針解引用而產(chǎn)生錯(cuò)誤。 (2)對(duì)動(dòng)態(tài)開辟的空間越界訪問。這一點(diǎn)即使是存放在棧區(qū)的數(shù)組中也非常常見,不做
    發(fā)表于 01-21 06:04

    機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見錯(cuò)誤與局限性

    ,并驗(yàn)證輸出結(jié)果,就能不斷提升專業(yè)技能,養(yǎng)成優(yōu)秀數(shù)據(jù)科學(xué)家的工作習(xí)慣。需避免的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)數(shù)據(jù)錯(cuò)誤在訓(xùn)練數(shù)據(jù)驅(qū)動(dòng)的人工智能模型時(shí),我們會(huì)遇到一些常見錯(cuò)誤和局
    的頭像 發(fā)表于 01-07 15:37 ?203次閱讀
    機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需<b class='flag-5'>避免</b>的 7 個(gè)<b class='flag-5'>常見</b><b class='flag-5'>錯(cuò)誤</b>與局限性

    C語(yǔ)言C++之間的區(qū)別是什么

    ,尤其是在涉及到類型轉(zhuǎn)換時(shí),會(huì)盡量防止隱式的、可能導(dǎo)致問題的類型轉(zhuǎn)換。 相比之下,C語(yǔ)言允許更多的靈活性,但也更容易產(chǎn)生類型相關(guān)的運(yùn)行時(shí)錯(cuò)誤,因?yàn)槠漕愋蜋z查不如C++嚴(yán)格。 3、函數(shù)
    發(fā)表于 12-11 06:23

    C語(yǔ)言中除數(shù)為0屬于什么錯(cuò)誤

    0 的錯(cuò)誤,以及援引數(shù)組元素時(shí)下標(biāo)溢出等。 靜態(tài)錯(cuò)誤又可以分為語(yǔ)法錯(cuò)誤和靜態(tài)語(yǔ)義錯(cuò)誤。語(yǔ)法錯(cuò)誤
    發(fā)表于 12-08 06:38

    C語(yǔ)言的編程技巧

    1、宏定義使用do{...}while(0)?:當(dāng)宏定義中包含多條語(yǔ)句時(shí),使用do{...}while(0)可以避免語(yǔ)句嵌套問題,確保宏的獨(dú)立性。? ?2、靈活數(shù)組成員?:C99標(biāo)準(zhǔn)允許結(jié)構(gòu)體的最后
    發(fā)表于 11-27 06:46

    C語(yǔ)言常見算法

    # C語(yǔ)言常見算法 C語(yǔ)言中常用的算法可以分為以下幾大類: ## 1. 排序算法 ### 冒泡排序 (Bubble Sort) ```
    發(fā)表于 11-24 08:29

    知曉常見的銅纜安裝錯(cuò)誤避免

    銅纜(如網(wǎng)線、電話線等)是網(wǎng)絡(luò)和數(shù)據(jù)傳輸?shù)幕A(chǔ)設(shè)施,但在安裝過程中,由于操作不當(dāng)或忽視細(xì)節(jié),常出現(xiàn)各種錯(cuò)誤,導(dǎo)致網(wǎng)絡(luò)性能下降甚至故障。以下是常見的銅纜安裝錯(cuò)誤及預(yù)防措施,幫助您避免踩坑
    的頭像 發(fā)表于 09-16 10:42 ?919次閱讀

    電商API常見錯(cuò)誤排查指南:避免集成陷阱

    ? 在電商平臺(tái)開發(fā)中,API集成是連接系統(tǒng)、實(shí)現(xiàn)數(shù)據(jù)交換的核心環(huán)節(jié)。然而,許多開發(fā)者在集成過程中常遇到錯(cuò)誤,導(dǎo)致項(xiàng)目延遲、數(shù)據(jù)丟失或用戶體驗(yàn)下降。本文將逐步介紹常見錯(cuò)誤類型、排查方法
    的頭像 發(fā)表于 07-11 14:21 ?2054次閱讀
    電商API<b class='flag-5'>常見</b><b class='flag-5'>錯(cuò)誤</b>排查指南:<b class='flag-5'>避免</b>集成陷阱

    高溫電阻率測(cè)試中的5個(gè)常見錯(cuò)誤及規(guī)避方法

    測(cè)試結(jié)果出現(xiàn)偏差。下面為你詳細(xì)剖析高溫電阻率測(cè)試中的 5 個(gè)常見錯(cuò)誤,并提供有效的規(guī)避方法。? 一、樣品制備不當(dāng)? 常見錯(cuò)誤? 樣品的形狀、
    的頭像 發(fā)表于 06-09 13:07 ?894次閱讀
    高溫電阻率測(cè)試中的5個(gè)<b class='flag-5'>常見</b><b class='flag-5'>錯(cuò)誤</b>及規(guī)避<b class='flag-5'>方法</b>

    深入理解C語(yǔ)言C語(yǔ)言循環(huán)控制

    C語(yǔ)言編程中,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無(wú)限循環(huán),C語(yǔ)言提供了多種循
    的頭像 發(fā)表于 04-29 18:49 ?2052次閱讀
    深入理解<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>:<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>循環(huán)控制

    在工業(yè)自動(dòng)化中使用固態(tài)繼電器時(shí)應(yīng)避免的5個(gè)錯(cuò)誤

    固態(tài)繼電器(SSR)已成為工業(yè)自動(dòng)化的無(wú)名英雄。它們安靜、可靠、速度快——這是繼電器應(yīng)具備的所有特點(diǎn)。但就像高科技駕駛艙中的新手飛行員一樣,即使是經(jīng)驗(yàn)豐富的工程師在使用SSR時(shí)也會(huì)犯常見錯(cuò)誤。本文讓我們來看看應(yīng)如何避免在工業(yè)自動(dòng)
    的頭像 發(fā)表于 04-20 11:42 ?730次閱讀

    必看!15個(gè)C語(yǔ)言常見陷阱及避坑指南

    ? C語(yǔ)言雖強(qiáng)大,但隱藏的“坑”也不少!稍不留神就會(huì)導(dǎo)致程序崩潰、數(shù)據(jù)異常。本文整理15個(gè)高頻陷阱,助你寫出更穩(wěn)健的代碼! ? 陷阱1:運(yùn)算符優(yōu)先級(jí)混淆? 問題:運(yùn)算符優(yōu)先級(jí)不同可能導(dǎo)致計(jì)算順序錯(cuò)誤
    的頭像 發(fā)表于 03-16 12:10 ?1852次閱讀