检查数组的长度

标签 c arrays

#define lengthOfArray(x)  (sizeof(x) / sizeof(x[0]))

似乎在main()中给出了正确的答案,但在array_set()的printf()中。我错过了什么吗?

int* decValue2[BUF_SIZE] = {
  0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 
  0x99, 0x00, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
};

#define lengthOfArray(x)  (sizeof(x) / sizeof(x[0]))


void array_set(int* y_dest, int* y_src, int arrayLength){ // arrays
     int i = 0;

     printf("lengthOfArray in function: %d \n", lengthOfArray(y_src));  
     // [TODO] check that y_dest has enough space
     for (i=0;i<arrayLength; i++)
         y_dest[i] = y_src[i];
    // 
}


// In main()

    int y_int = 0;
    int y_array[BUF_SIZE];

    int_set_right( &y_int, 9876543);
    array_set(y_array, decValue2, BUF_SIZE);

    printf("lengthOfArray: %d \n", lengthOfArray(y_array));  

    printf("Value int :: %d \n",y_int);
         int i = 0;
     for (i=0;i<BUF_SIZE; i++) 
         printf("%x ", (0xff & y_array[i]));    

最佳答案

lengthOfArray 对于指针(与数组相反)无法正常工作,因为 sizeof(x) 将返回指针的大小,而不是数组的大小指向数组。

您必须显式地将数组的大小传递到函数中(就像您已经做的那样)。

关于检查数组的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140165/

相关文章:

javascript - 当我从另一个对象调用它时对象未定义

c - 安装 r 包时出错 (Linux Mint 17.1) "error: C preprocessor "g++ -E“完整性检查失败”

c - printf() 中的格式说明符在应为 char 时要求输入 int

c - 程序卡在while循环中

javascript - 将字符串拆分为 n 长度的数组

objective-c - Objective-C 中的 C 数组维护指向已释放对象的指针

在C中将无符号短数组转换为字节数组

c重新分配(): invalid next size

java - 不能在 ArrayList 中使用对象的 toString() 方法

arrays - VBA数组乘法,逐元素不循环