色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

零長數組如何使用定長包定義數據緩沖區

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 14:58 ? 次閱讀

零長數組

請先思考以下問題:

  • C語言中,數組長度是否可以為0?
  • 如果要接收一個不定長數據包,你會如何定義數據緩沖區?

第一個問題

在標準C語言中,沒有長度為0的數組,但在 GNU C語言中,數組長度可以為0 ,這是GNU對C語言的擴展。

先對零長數組做個介紹:

零長數組 :也叫柔性數組(變長數組)

  • 用途 : 長度為0的數組的主要用途是為了滿足需要變長度的結構體
  • 用法 : 在一個結構體的最后, 申明一個長度為0的數組, 就可以使得這個 結構體是可變長的

對于編譯器來說, 此時 長度為0的數組并不占用空間 , 因為數組名本身不占空間, 它只是一個偏移量, 數組名這個符號本身代表了一個不可修改的 地址常量

第二個問題

通常定義一個不定長數據包的緩沖區,有兩種常用方法:

  • 定長數據緩沖區 , 設置一個足夠大小 MAX_LENGTH 的數據緩沖區
  • 設置一個指向實際數據的指針 , 每次使用時, 按照數據的長度動態的開辟數據緩沖區的空間

下面依次分析使用 定長包指針數據包和使用零長數組三種方式的不同。

定長包

假設我們要在網絡中接收一個長度為1024字節的數據,怎么定義數據緩沖區呢?

定義一個數據緩沖區結構體data_buf,成員包含數據長度len和數據內容data

  • 數據結構定義
struct data_buf{
 int len;
 char data[MAX_LENGTH];
}
  • 數據結構大小

數據內容放在data數組中,數據最大長度限制為MAX_LENGTH字節,以滿足接收數據的需求。

考慮對齊, 那么數據結構的大小 >= sizeof(int) + sizeof(char) * MAX_LENGTH

但是,通常情況下,我們接收的數據不會達到最大長度,假設MAX_LENGTH=2048,那么接收1024字節內容,還有1024字節空間就浪費了。

  • 數據包創建

當接收到數據時,使用malloc動態分配內存。一般來說, 我們會返回一個指向緩沖區數據結構 data_buf 的指針:

///  開辟
    if ((mbuffer = (struct data_buf *)malloc(sizeof(struct data_buf))) != NULL)
    {
        mbuffer- >len = CURR_LENGTH;//CURR_LENGTH為接收到的數據長度
        memcpy(mbuffer- >data, "Hello World", CURR_LENGTH);


        printf("%d, %sn", mbuffer- >len, mbuffer- >data);
    }
  • 釋放
/// 銷毀
free(mbuffer);
mbuffer = NULL;
  • 優點 :使用簡單,內存的開辟和釋放簡單
  • 缺點 :使用定長數組作為數據緩沖區, 為了避免造成緩沖區溢出, 數組的大小一般設為足夠的空間 MAX_LENGTH, 而實際使用過程中, 達到 MAX_LENGTH 長度的數據很少, 那么多數情況下, 緩沖區的大部分空間都是浪費掉的.
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7246

    瀏覽量

    91208
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140572
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40633
  • 數組
    +關注

    關注

    1

    文章

    419

    瀏覽量

    26398
收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    嵌入式中零長度數組基本操作方法

    C語言零長度數組,聽起來可能有點奇怪,因為它沒有分配內存空間,無法存儲數據。但實際上,零長度數組在Linux內核中隨處可見。 零長度數組定義
    的頭像 發表于 05-11 08:49 ?1578次閱讀
    嵌入式中<b class='flag-5'>零長度數組</b>基本操作方法

    在AN65974中短數據包零長數據包是什么意思?

    在 AN65974 中,短數據包零長數據包是什么意思? 非常感謝!
    發表于 05-30 07:41

    緩沖區數據如何轉換成數組

    各位高手,請問下我從儀器中讀取出來數據緩沖區后,如何能把這些數據轉換成一個數組,格式應該怎樣去轉換。。。。半天也弄不出來 幫幫忙吧先謝謝大家了。。。
    發表于 02-22 17:05

    請問串口DMA+環形緩沖區如何實現不定長度的數據收發?

    請問串口DMA+環形緩沖區如何實現不定長度的數據收發?
    發表于 12-08 06:13

    怎樣去使用STM32串口驅動不定長數據接收帶環形緩沖區

    怎樣去使用STM32串口驅動不定長數據接收帶環形緩沖區呢?有哪些注意事項?
    發表于 12-08 08:08

    環形緩沖區的實現原理

    在通信程序中,經常使用環形緩沖區作為數據結構來存放通信中發送和接收的數據。環形緩沖區是一個先進先出的循環緩沖區,可以向通信程序提供對
    的頭像 發表于 03-22 10:03 ?7834次閱讀
    環形<b class='flag-5'>緩沖區</b>的實現原理

    緩沖區是啥意思 STM32串口數據接收之環形緩沖區

    緩沖區顧名思義是緩沖數據用的。實現緩沖區最簡單的辦法時,定義多個數組,接收一
    的頭像 發表于 07-22 15:33 ?1.1w次閱讀

    日常編程中柔性數組定義和應用

    ? 1 引言 定長數組 在平時的開發中,緩沖區數據收發時,如果采用緩沖區
    的頭像 發表于 11-11 14:51 ?1440次閱讀

    STM32串口數據接收 --環形緩沖區

    STM32串口數據接收 --環形緩沖區環形緩沖區簡介??在單片機中串口通信是我們使用最頻繁的,使用串口通信就會用到串口的數據接收與發送,環形緩沖區
    發表于 12-28 19:24 ?31次下載
    STM32串口<b class='flag-5'>數據</b>接收 --環形<b class='flag-5'>緩沖區</b>

    環形緩沖區的實現思路

    單片機程序開發一般都會用到UART串口通信,通過通信來實現上位機和單片機程序的數據交互。通信中為了實現正常的收發,一般都會有對應的發送和接收緩存來暫存通信數據。這里使用環形緩沖區的方式來設計
    的頭像 發表于 01-17 15:07 ?2018次閱讀

    如何使用指針數據包定義數據緩沖區

    指針數據包 相信大多數人會將定長數組換為 指針 , 每次使用時動態的開辟 CURR_LENGTH 大小的空間, 因為這樣可以避免造成 MAX_LENGTH - CURR_LENGTH 空間的浪費
    的頭像 發表于 09-27 15:01 ?659次閱讀

    變長數據包數據結構定義

    用方便的呢? GNU C 的0長度數組(變長數組/柔性數組)就是這樣一個擴展. 對于 0數組 的這個特點,很容易構造出變成結構體,如
    的頭像 發表于 09-27 15:08 ?938次閱讀

    C++環形緩沖區設計與實現

    一、環形緩沖區基礎理論解析(Basic Theory of Circular Buffer) 1.1 環形緩沖區定義與作用(Definition and Function of Circular
    的頭像 發表于 11-09 11:21 ?2970次閱讀
    C++環形<b class='flag-5'>緩沖區</b>設計與實現

    單片機中的幾種環形緩沖區的分析和實現

    單片機中的幾種環形緩沖區的分析和實現一、簡介環形緩沖區(RingBuffer)是一種高效的使用內存的方法,它將一段固定長度的內存看成一個環形結構,用于存儲數據,能夠避免使用動態申請內存
    的頭像 發表于 08-14 08:39 ?1618次閱讀
    單片機中的幾種環形<b class='flag-5'>緩沖區</b>的分析和實現

    RTOS的流緩沖區機制解析

    SAFERTOS中的流緩沖區(Stream buffer)機制,可以實現任務到任務或中斷到任務之間的通信。字節流是由發送方寫入緩沖區,接收方讀取緩沖區數據。流
    的頭像 發表于 02-14 11:33 ?461次閱讀
    RTOS的流<b class='flag-5'>緩沖區</b>機制解析
    主站蜘蛛池模板: 亚洲国产日韩制服在线观看 | 国内精品免费视频精选在线观看 | 97精品视频 | 羞羞在线观看 | 亚洲日本欧美产综合在线 | 国产精品点击进入在线影院高清 | 国产免费怕怕免费视频观看 | 国产毛片AV久久久久精品 | 邻居的阿2中文字版电影 | 9久高清在线不卡免费无吗视频 | 好紧的小嫩嫩17p | 无码一区二区在线欧洲 | 91热久久免费频精品99欧美 | 青青草原在线免费 | 亚洲精品国产熟女久久久 | 強姧伦久久久久久久久 | 欧美亚洲国产免费高清视频 | 最近中文字幕高清中文 | 亚洲中文字幕手机版 | 日本无码毛片一区二区手机看 | 一本久道久久综合婷婷五月 | 亚洲 欧美 国产 综合久久 | 草莓湿漉漉是好事还是恶性 | 美女扒开腿让男生桶爽免费APP | 亚洲成人中文 | 男女啪啪抽搐呻吟高潮动态图 | 久久re6热在线视频精品66 | 亚洲AV天堂无码麻豆电影 | 欧美一级做a爰片免费 | 97在线视频免费人妻 | 果冻传媒独家原创在线观看 | 色窝窝777欧美午夜精品影院 | 一个人的免费完整在线观看HD | 软糯白嫩双性受h | 国产人妻麻豆蜜桃色 | 天天射天天爱天天干 | 窝窝色资源站 | 久久免费看少妇高潮A片JA | 毛片在线看片 | 亚洲精品久久久午夜麻豆 | 亚洲AV无码国产精品色在线看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品