Possible Duplicate:
How to find the sizeof(a pointer pointing to an array)
我有以下代码
int myfunc(char *arr)
{
const int sizearr = sizeof( arr ) / sizeof(char);
}
这会产生指针的大小,而不是我传递给函数的 char 数组 [17] 的大小。
我知道我可以使用 strlen 来解决问题,但是有什么方法可以将 char*arr 指针转换回我传递给函数的 char 数组 [17] 以便使用 sizeof(char array[ 17]) ?
如果要传递 17 个字符的数组,则需要通过引用传递它(仅限 C++):
int myfunc(char (&arr)[17])
{
unsigned int const sizearr = sizeof arr;
// ...
}
或者做一个模板来推断大小:
template <unsigned int sizearr>
int myfunc(char (&arr)[sizearr])
{
// ...
}
在 C 中,您根本无法将数组作为参数传递,因此您有责任单独传达数组大小。
更新:正如@David 建议的那样,您可以通过传递指向数组的指针来修复 C 中的数组类型:
int myfunc(char (*arr)[17])
{
unsigned int const sizearr = sizeof *arr;
// ...
}
int main()
{
char s[17];
return myfunc(&s);
}