簡體   English   中英

如何確定uint8_t的數組長度?

[英]How to determine array length of uint8_t?

我正在嘗試在下面的代碼上確定msg數組長度。 我使用了strlensizeof但它們沒有返回6。可以使用什么函數來確定uint8_t數組的長度,或者如何修改以下代碼( osal_DataLenght() func)?

int osal_DataLength( char *pString ){
  return (int)( strlen( pString ) );
}

void setNewLevel( uint8_t newLevel ){ //GW specific
  uint8_t msg[8] = {'\0'};
  msg[0] = '0';
  msg[1] = '7';
  msg[6]= newLevel;
  //msg[7] = '0';
  printf("the array length:%d\n", osal_DataLength(msg) );
}

int main(void){
    setNewLevel(0xD5);
    return 0;
}

要知道數組的大小,請寫(在setNewLevel()如@Dabo所示):

sizeof(msg)/sizeof(uint8_t);

strlen()返回字符串的大小(以NULL終止的char數組,即'\\0' )。 您不能在這種情況下使用它,因為:

  1. msg[2]msg[5]值未初始化
  2. msg不是以NULL終止的char序列。

將數組傳遞給函數時,它會衰減為指針,而函數中沒有辦法知道原始數組的長度。 將長度作為附加變量傳遞

int osal_DataLength( char *pString, int size )
. 
.
.
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg)) );
strlen(const char *str)

Strlen函數正在尋找'\\ 0'以完成並顯示數組長度。 因此,您首先要處理所有數組數據,然后在setNewLevel函數中進行msg [0] = 0和msg [1] = 7,然后msg [6] = newLevel,但其他都是'\\ 0',所以您總是會看到長度是2。

也許您可以像這樣使用它。 首先,您可以使用memset將所有元素數組設置為零“ 0”,然后在數組中添加所需的內容。 您必須對使用'\\ 0'的數組元素做最后一件事。 如果這樣使用,您可以看到數組長度。

    void setNewLevel( uint8_t newLevel ){ //GW specific
    uint8_t msg[8] = {'\0'};
    memset(msg,'0',8); //  to set all element to zero 
    msg[0] = '0';
    msg[1] = '7';
    msg[6]= newLevel;
    msg[7]= '\0';  // this is array's last element.
    printf("the array length:%d\n", osal_DataLength(msg) );
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM