我正在尝试在下面的代码中确定msg
的数组长度,我使用了strlen和sizeof但是它们没有返回6.我可以使用什么函数来确定uint8_t数组的长度或者如何我可以修改下面的代码(osal_DataLenght()fcn)吗?
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;
}
答案 0 :(得分:5)
要知道数组的大小,请写(在 setNewLevel()
中表示@Dabo):
sizeof(msg)/sizeof(uint8_t);
strlen()
返回字符串的大小(由NULL
终止的char数组,即'\0'
)。你不能在这种情况下使用它,因为:
msg[2]
至msg[5]
值未初始化msg
不是由char
终止的NULL
序列。答案 1 :(得分:1)
当将数组传递给函数时,它会衰减到指针,并且无法知道原始数组的长度。将长度作为附加变量传递
int osal_DataLength( char *pString, int size )
.
.
.
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg)) );
答案 2 :(得分:0)
strlen(const char *str)
Strlen函数正在寻找'\ 0'来完成并显示数组长度。所以你先做所有数组数据'\ 0'然后在你的setNewLevel函数msg [0] = 0和msg [1] = 7然后msg [6] = newLevel但其他都是'\ 0'所以你总是看到长度是2。
答案 3 :(得分:-1)
也许你可以像这样使用它。首先,您可以使用 memset 将所有元素数组设置为 ZERO“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) );
}