繁体   English   中英

C中的所有数组长度方法都不起作用

[英]All the array length methods in C don't work

我试过(sizeof(array)/sizeof(array[0])) 没工作。 我写了一个简单的函数:

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]))

有几种方法可以获取函数内部的数组长度(可以在同一个文件中,也可以在不同的源文件中)

  1. 将数组长度作为单独的参数传递。
  2. 使数组长度为全局extern以便函数可以直接访问全局数据

尝试这个

main()
{
int a[10] ;
printf("%d\n", sizeof(a)/sizeof(int) ) ;
}

output : 10 

当数组是函数的参数时,请参阅为什么sizeof不能正确报告数组的大小? 从comp.lang.c FAQ中了解为什么sizeof方法不起作用。 您可能应该阅读有关数组整个部分

关于你的length函数,你的“简单”函数只有在你的数组恰好具有以一个值为0的元素终止的语义时才能工作。 它不适用于任意数组。 当数组在C中衰减为指针时,无法恢复数组的大小,并且必须传递数组长度。 (即使C标准库中的函数也没有免疫; gets不接受指定其目标缓冲区长度的参数,因此它是非常不安全的。它不可能确定目标缓冲区的大小,它因此无法阻止缓冲区溢出。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM