我试过(sizeof(array)/sizeof(array[0]))
。没有工作。 我写了一个简单的函数:C中的所有数组长度方法都不起作用
int length(int array[]){
int i=0;
while(array[i]) i++;
return i;
}
曾为一分钟后,没有工作的下一步。
有人请帮忙!我将Xcode用作IDE
我试过(sizeof(array)/sizeof(array[0]))
。没有工作。 我写了一个简单的函数:C中的所有数组长度方法都不起作用
int length(int array[]){
int i=0;
while(array[i]) i++;
return i;
}
曾为一分钟后,没有工作的下一步。
有人请帮忙!我将Xcode用作IDE
数组的长度是不是在C数组的一部分,所以传递一个数组时,作为参数的函数,你应该通过它的长度为参数。这里有一个例子:
#define ARRLEN(a) (sizeof(a)/sizeof (a)[0]) /* a must be an array, not a pointer */
void printarray(int* a, int alen)
{
int i;
for (i = 0; i < alen; i++)
printf("%d\n", a[i]);
}
main()
{
int a[] = { 3, 4, 5 };
printarray(a, ARRLEN(a));
return 0;
}
然而,如果您的阵列以这样一种方式,总是以一个哨兵那是不正常的数据,然后,直到你遇到,你可以遍历元素结束定义哨兵。例如,
void printstrings(char** a)
{
int i;
for (i = 0; a[i]; i++)
printf("%s\n", a[i]);
}
main()
{
char* a[] = { "This", "should", "work.", NULL };
printstrings(a);
return 0;
}
将数组传递到函数中与将指针传递给数组的方式相同。 因此sizeof(array)/sizeof(array[0])
不起作用。
你可以定义一个全局宏:
#define A_LEN(a) (sizeof(a)/sizeof(a[0]))
该宏也不起作用。 (我指出这是因为新手可能不明白。) –
@JimBalter感谢您的评论。稍后会更新我的答案。 –
试试这个
main()
{
int a[10] ;
printf("%d\n", sizeof(a)/sizeof(int)) ;
}
output : 10
OP需要在声明数组之外的函数中使用长度(OP在我的回答的评论中声明了这一点)。 –
见Why doesn't sizeof properly report the size of an array when the array is a parameter to a function?从comp.lang.c常见问题理解为什么sizeof
方法不起作用。你可能应该阅读entire section on arrays。
关于你length
功能,你的“简单”的功能,可以工作只有如果你的阵列碰巧有语义,它终止与拥有0
价值的元素。它不适用于任意数组。当数组已经衰减为C中的指针时,无法恢复数组的大小,并且您必须沿着数组长度传递。 (即使C标准库中的函数也不是免疫的; gets
没有指定其目标缓冲区的长度的参数,因此它是非常不安全的,它是不可能的它确定目标缓冲区的大小,因此它不能防止缓冲区溢出。)
这应该可以帮助你:http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c。 'sizeof'不起作用,因为它被传递给一个函数,而另一个不是因为它是用于空终止数组(通常是字符串)。 – chris
@chris尽管网址,链接是关于C++的问题,而不是C. –
@JimBalter,True,但对C++语法有一个基本的了解,几乎所有对C转换的小东西都是有效的,比如'new []' - >'malloc'。如果我能找到一个C版本,我很乐意使用它。 – chris