为什么sizeof不给出数组的长度?

时间:2014-02-19 05:34:40

标签: c sizeof

当我在printf函数中使用sizeof时,它返回长度,但如果我赋给任何int变量,它不会给出数组的长度。相反,程序停止。 这是代码:

int main(void) {
  int a[] = {1, 3, 5, 6, 23, 55, 93, 923, 112, 33, 5, 23};
  int len = sizeof(a)/sizeof(a[0]);   // It return anonymous integer
  int len2 = sizeof(a);
   // mergesort(a, 0, len); // This is an update, because of this, program stops.
  printf("%d\t%d\n", sizeof(a)/sizeof(a[0]), len);
  printf("%d", len2);  // The program stops when using this.
}

更新:伙计们,抱歉这个问题。这是我的错。它运行正常,因为我正在使用mergesort算法。我认为这在mergesort中是一个错误。

1 个答案:

答案 0 :(得分:1)

@Acme有一个很好的想法,使用printf()格式说明符%d来表示size_t值是错误的。

在我的Linux amd64系统上,sizeof(int)= 4和sizeof(size_t)= 8.这可能是个问题。

它似乎对我来说很好(可能在第二个printf()语句之后缺少换行符让你感到困惑?)但是由于size_t vs int格式说明符不匹配,结果是未定义的。

$ ./size
12  12
48$