C 获取数组大小的改进方法

C 获取数组大小的改进方法,c,C,我制作了一个函数,它接收一个字符数组的指针,该数组表示一个十六进制数,并返回它的十进制值 在该函数中,这是我当前用于获取数组大小的函数 size_t iSize = 0; while (s[iSize] != '\0'){ iSize++; } 我正在寻找一个更好的方法来做到这一点我已尝试int`iSize=sizeof(s)/sizeof(s[0])。数组大小未通过函数传递。例如: int my_getsize(int* ptr) { return sizeof(ptr);

我制作了一个函数,它接收一个字符数组的指针,该数组表示一个十六进制数,并返回它的十进制值

在该函数中,这是我当前用于获取数组大小的函数

size_t iSize = 0;
while (s[iSize] != '\0'){   iSize++;    }

我正在寻找一个更好的方法来做到这一点我已尝试int`iSize=sizeof(s)/sizeof(s[0])。

数组大小未通过函数传递。例如:

int my_getsize(int* ptr)
{
    return sizeof(ptr);
}

int main()
{
    int arr[100];
    printf("%d\n", sizeof(arr)); //output: 400
    printf("%d\n", my_getsize(arr)); //output: 4
}
size_t my_strlen(char* ptr)
{
    size_t iSize = 0;
    while (*ptr++) iSize++;
    return iSize;
}
在32位系统中,my_getsize(buf)返回4,即指针的大小。而
sizeof(buf)
返回400,即100*
sizeof(int)
(也是4)。解决此问题的唯一方法是将数组大小传递给函数。例如
foo(arr,sizeof(arr)/sizeof(arr[0]))

字符数组是一种特殊情况,因为字符串以null结尾,所以可以查找数组中的最后一个零。但是请注意,这不会返回包含空终止符的数组大小。它与strlen相同。例如:

int my_getsize(int* ptr)
{
    return sizeof(ptr);
}

int main()
{
    int arr[100];
    printf("%d\n", sizeof(arr)); //output: 400
    printf("%d\n", my_getsize(arr)); //output: 4
}
size_t my_strlen(char* ptr)
{
    size_t iSize = 0;
    while (*ptr++) iSize++;
    return iSize;
}

对于
char buf[]=“12345”
sizeof(buf)
为6,而
strlen(buf)
为5。通常,您不必担心使用这类简单函数进行优化,因为编译器会为您进行优化。

要查找以null结尾的字符串的长度,请使用
strlen
。根据您的描述,这才是您关心的,而不是数组的大小。您是否考虑过用一个函数替换将十六进制字符串转换为数字的整个函数?