2014-02-19 1 views
0

printf 함수에서 sizeof를 사용할 때 길이를 반환하지만 int 변수에 할당하면 배열의 길이가 제공되지 않습니다. 대신 프로그램이 중지됩니다.왜 sizeof 배열의 길이를 제공하지 않습니다?

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

'프로그램 중지'란 무엇을 의미합니까? – herohuyongtao

답변

1

@Acme는 printf() 형식 지정자 %d을 사용하여 size_t 값을 잘못 지정했습니다.

내 Linux amd64 시스템에서는 sizeof (int) = 4이고 sizeof (size_t) = 8입니다. 문제가 될 수 있습니다.

제 2의 printf() 문장이 당신을 혼란스럽게 한 후 아마도 개행 문자가 부족한 것 같습니다. 그러나 size_t와 int 형식 지정자가 일치하지 않기 때문에 결과가 정의되지 않습니다.

$ ./size 
12 12 
48$ 
+0

printf에서 형식 지정자가 올바르지 않습니다. – Sadique