2022年1月15日 星期六

[C++]動態陣列如何確定長度?

實務上常常會遇到即使是呼叫同一個指令,但回傳的DATA的長度卻不一,

當這串資料是動態陣列的時候,往往透過sizeof()或strlen()得知長度值,那該如何確認呢?

常見的做法,這類的Function都會一併回傳一個長度值,告訴你回傳的資料總共多長,

以上圖舉例,這是我撰寫的一個function,

使用者會傳遞unsigned char*型別的變數returnData來裝他想拿回的資料,

假設使用者呼叫時以為應該會收到4 BYTE的資料,

便建立了一個4 Byte Array 給function去接收回傳值,

但實際上使用該function的情境只會給3 byte的資料並裝入回傳的returnDataLength陣列中,

那麼使用者收到之後,不就會誤用了最後 1 byte的內容嗎?(誰知道這1byte裝了什麼東西)

因此通常都會一併回傳一個長度值變數 returnDataLength,

讓使用者去比對這次回傳的資料長度和預想的是不是相同,

但這只是目前所屬團隊習慣的方式。


回傳一個長度值是一種方法,

利用定義好的通訊協定也是一種方法,

例如只要定義好該陣列的第一個byte就是該陣列的長度,

並在回傳之前把長度值加到returnData陣列開頭,

這樣就可以省略回傳長度值的動作了,

只是呼叫端就必須要明確理解這樣的通訊協定,才不會造成誤解。


沒有留言:

張貼留言

社會新鮮人如何投資?

我的觀點是,在 沒有很多 本錢 的情況下, 別寄望每個月幾千元放到股票或者最近很夯的高股息ETF就能讓你致富, 先投資自己,讓自己的本業收入提高吧。