Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何确定uint8\u t的数组长度?_C_Arrays_Strlen_Uint8t - Fatal编程技术网

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) );
        }