[英]How to determine array length of uint8_t?
我正在嘗試在下面的代碼上確定msg
數組長度。 我使用了strlen
和sizeof
但它們沒有返回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'
)。 您不能在這種情況下使用它,因為:
msg[2]
到msg[5]
值未初始化 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.