2014-01-06 3 views
2
#include<stdio.h> 
#define TOTAL_NO (sizeof(array)/sizeof(array[0])) 
int array[]={23,34,12,17,204,99,16}; 

int main() 
{   


int d; 
for(d=-1; d<=(TOTAL_NO-2); d++) 
printf("%d\n",array[d+1]); 

return 0; 

} 

왜이 프로그램은 배열의 내용을 표시하지 않습니까? 버그는 어디에 있습니까?이 C 프로그램에 대해 원하는 출력을 얻지 못했습니다.

+0

왜 '대 (d = 0; D Kninnug

+1

sizeof (int)는 unsingned int를 반환합니다. 또는 uint32_t를 포함하는 size_t 구조체. – tesseract

답변

2

TOTAL_NOsize_t 인 값을 반환합니다. 이 부호가 없으므로 d은 루프 종료 조건에서 테스트 d<=(TOTAL_NO-2)에 대해 서명되지 않은 것으로 변환됩니다. 32 비트 정수 가정

이 분명 초기 시험을

0xffffffff <= 7 

하게 실행 루프를 방지하는 실패. 당신이 너무 일하는 것이 더 일반적인 형태

for(d=0; d<TOTAL_NO; d++) 

에 루프를 변경

for(d=-1; d<=(int)(TOTAL_NO-2); d++) 

로 변경할 경우 예상대로

루프

실행됩니다. 이 명확하게, 더 유지 보수 코드 결과로이 바람직하다

+0

네 지금은 잘 작동, sizeof 부호없는 정수 값을 생성하는 것을 잊어 버렸습니다. 감사. – user2728397

1

사용하는 매크로는 더 나은

#include<stdio.h> 
#define TOTAL_NO(X) (sizeof(X)/sizeof(X[0])) 


int array[10]={23,34,12,17,204,99,16}; 

int main() 
{   


int d; 
for(d = -1; d <= (int)TOTAL_NO(array); d++) { 
printf(" %d\n",array[d+1]); 

} 
return 0; 

} 
1

당신이를 sizeof 반환 size_t 타입을 알아야한다, d는 당신이 함께 유형을 넣어 때, int 형이다 D는 부호로 될 것이고, D는 코드보다 큰 number.like 차례 것이다

int a=-1; 
unsigned b=1; 
if(b>a) 
    //something will never run 
관련 문제