我创建了一个函数,它接收一个表示十六进制数字的字符数组的指针,并返回它的十进制值。
在该函数中,这是我目前用于获取数组大小的内容
size_t iSize = 0;
while (s[iSize] != '\0'){ iSize++; }
我希望找到一个更好的方法来做到这一点。 我已经尝试过``iSize = sizeof(s)/ sizeof(s [0])。
答案 0 :(得分: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
}
在32位系统中my_getsize(buf)
返回4,这是指针的大小。虽然sizeof(buf)
返回400,即100 * sizeof(int)
(也是4)。解决这个问题的唯一方法是将数组大小传递给函数。例如foo(arr, sizeof(arr)/sizeof(arr[0]))
字符数组是一种特殊情况,因为字符串以空值终止,您可以查找数组中的最后一个零。但请注意,这不会返回包含null-terminator的数组大小。它与strlen
相同。例如:
size_t my_strlen(char* ptr)
{
size_t iSize = 0;
while (*ptr++) iSize++;
return iSize;
}
对于char buf[] = "12345"
,sizeof(buf)
为6,而strlen(buf)
为5.通常,您不必担心使用此类简单函数进行优化,因为编译器会为您执行此操作。