如何确定uint8_t的数组长度?
How to determine array length of uint8_t?
我试图在下面的代码中确定 msg
的数组长度。我使用了 strlen
和 sizeof
但它们没有 return 6. 我可以使用什么函数来确定 uint8_t
数组的长度或者我如何修改下面的代码 ( osal_DataLenght()
函数)?
int osal_DataLength( char *pString ){
return (int)( strlen( pString ) );
}
void setNewLevel( uint8_t newLevel ){ //GW specific
uint8_t msg[8] = {'[=11=]'};
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;
}
将数组传递给函数时,它会衰减为指针,函数中无法知道原始数组的长度。将长度作为附加变量传递
int osal_DataLength( char *pString, int size )
.
.
.
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg)) );
要知道数组的大小,请写(在 setNewLevel()
中,如 @Dabo 所说):
sizeof(msg)/sizeof(uint8_t);
strlen()
returns 字符串的大小(字符数组以 NULL
结尾,即 '[=14=]'
)。您不能在这种情况下使用它,因为 :
msg[2]
到 msg[5]
值未初始化
msg
不是由 NULL
终止的 char
序列。
strlen(const char *str)
Strlen 函数正在查找“\0”以完成并显示数组长度。所以你首先做所有数组数据 '\0' 然后在你的 setNewLevel 函数中 msg[0]= 0 和 msg[1] = 7 然后 msg[6] = newLevel 但其他的是 '\0' 所以你总是看到长度为 2 。
也许你可以这样使用它。首先,您可以使用 memset 将所有元素数组设置为 ZERO"0" 然后在数组中添加您想要的内容。您必须在使用 '\0' 的数组元素中做最后一件事。如果你像那样使用你可以看到数组长度。
void setNewLevel( uint8_t newLevel ){ //GW specific
uint8_t msg[8] = {'[=10=]'};
memset(msg,'0',8); // to set all element to zero
msg[0] = '0';
msg[1] = '7';
msg[6]= newLevel;
msg[7]= '[=10=]'; // this is array's last element.
printf("the array length:%d\n", osal_DataLength(msg) );
}
我试图在下面的代码中确定 msg
的数组长度。我使用了 strlen
和 sizeof
但它们没有 return 6. 我可以使用什么函数来确定 uint8_t
数组的长度或者我如何修改下面的代码 ( osal_DataLenght()
函数)?
int osal_DataLength( char *pString ){
return (int)( strlen( pString ) );
}
void setNewLevel( uint8_t newLevel ){ //GW specific
uint8_t msg[8] = {'[=11=]'};
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;
}
将数组传递给函数时,它会衰减为指针,函数中无法知道原始数组的长度。将长度作为附加变量传递
int osal_DataLength( char *pString, int size )
.
.
.
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg)) );
要知道数组的大小,请写(在 setNewLevel()
中,如 @Dabo 所说):
sizeof(msg)/sizeof(uint8_t);
strlen()
returns 字符串的大小(字符数组以 NULL
结尾,即 '[=14=]'
)。您不能在这种情况下使用它,因为 :
msg[2]
到msg[5]
值未初始化msg
不是由NULL
终止的char
序列。
strlen(const char *str)
Strlen 函数正在查找“\0”以完成并显示数组长度。所以你首先做所有数组数据 '\0' 然后在你的 setNewLevel 函数中 msg[0]= 0 和 msg[1] = 7 然后 msg[6] = newLevel 但其他的是 '\0' 所以你总是看到长度为 2 。
也许你可以这样使用它。首先,您可以使用 memset 将所有元素数组设置为 ZERO"0" 然后在数组中添加您想要的内容。您必须在使用 '\0' 的数组元素中做最后一件事。如果你像那样使用你可以看到数组长度。
void setNewLevel( uint8_t newLevel ){ //GW specific
uint8_t msg[8] = {'[=10=]'};
memset(msg,'0',8); // to set all element to zero
msg[0] = '0';
msg[1] = '7';
msg[6]= newLevel;
msg[7]= '[=10=]'; // this is array's last element.
printf("the array length:%d\n", osal_DataLength(msg) );
}