当我在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中是一个错误。
答案 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$