實務上常常會遇到即使是呼叫同一個指令,但回傳的DATA的長度卻不一,
當這串資料是動態陣列的時候,往往透過sizeof()或strlen()得知長度值,那該如何確認呢?
常見的做法,這類的Function都會一併回傳一個長度值,告訴你回傳的資料總共多長,
以上圖舉例,這是我撰寫的一個function,
使用者會傳遞unsigned char*型別的變數returnData來裝他想拿回的資料,
假設使用者呼叫時以為應該會收到4 BYTE的資料,
便建立了一個4 Byte Array 給function去接收回傳值,
但實際上使用該function的情境只會給3 byte的資料並裝入回傳的returnDataLength陣列中,
那麼使用者收到之後,不就會誤用了最後 1 byte的內容嗎?(誰知道這1byte裝了什麼東西)
因此通常都會一併回傳一個長度值變數 returnDataLength,
讓使用者去比對這次回傳的資料長度和預想的是不是相同,
但這只是目前所屬團隊習慣的方式。
回傳一個長度值是一種方法,
利用定義好的通訊協定也是一種方法,
例如只要定義好該陣列的第一個byte就是該陣列的長度,
並在回傳之前把長度值加到returnData陣列開頭,
這樣就可以省略回傳長度值的動作了,
只是呼叫端就必須要明確理解這樣的通訊協定,才不會造成誤解。
沒有留言:
張貼留言