C 如何确定uint8\u t的数组长度?
我试图在下面的代码中确定C 如何确定uint8\u t的数组长度?,c,arrays,strlen,uint8t,C,Arrays,Strlen,Uint8t,我试图在下面的代码中确定msg的数组长度。我使用了strlen和sizeof,但它们没有返回6。我可以使用什么函数来确定uint8\u t数组的长度,或者如何修改下面的代码(osal\u DataLenght()func) 将数组传递给函数时,它将衰减为指针,函数中无法知道原始数组的长度。将长度作为附加变量传递 int osal_DataLength( char *pString, int size ) . . . printf("the array length:%d\n", osal_Da
msg
的数组长度。我使用了strlen和sizeof,但它们没有返回6。我可以使用什么函数来确定uint8\u t
数组的长度,或者如何修改下面的代码(osal\u DataLenght()
func)
将数组传递给函数时,它将衰减为指针,函数中无法知道原始数组的长度。将长度作为附加变量传递
int osal_DataLength( char *pString, int size )
.
.
.
printf("the array length:%d\n", osal_DataLength(msg, sizeof(msg)) );
要知道数组的大小,请编写(如@Dabo所述,在
setNewLevel()
中):
strlen()
返回字符串的大小(字符数组以NULL
终止,即'\0'
)。您不能在此上下文中使用它,因为:
msg[2]
至msg[5]
值未初始化msg
不是由NULL
终止的char
序列Strlen函数正在查找“\0”以完成并显示数组长度。因此,您首先要处理所有数组数据'\0',然后在setNewLevel函数msg[0]=0和msg[1]=7中,然后是msg[6]=newLevel,但其他数组数据是'\0',因此您总是看到长度是2 也许你可以这样使用它。首先,您可以使用memset将所有元素数组设置为0“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) );
}
我想知道数组的长度,而不是数组的大小。C中没有这样的东西。@sven:你是什么意思?这个比率给出了数组的长度(比如Javascript中的
.length
)。但是,我想知道,即使mid元素是“\0”@sven,是否也可以这样做,因此请使用sizeof解决方案,但只能在定义数组的块中使用。否则,使用存储大小的size\u t
成员定义一个struct
。我现在不需要msg[7],如果我必须使用它来查找长度,那么我可以取消注释msg
的长度是8,无论您是否初始化所有元素。我是否需要为第二、第三、第四个元素任意赋值,和数组的第5个元素,以便在上述代码上检测数组的长度为7?uint8_t msg[8]={'\0'}
将第一个元素设置为'\0'
,将其余元素设置为0
,因此memset()
是多余的。
sizeof(msg)/sizeof(uint8_t);
strlen(const char *str)
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) );
}