0
사용자로부터받은 숫자로 int 배열을 채우려고합니다.scanf와 EOF를 올바르게 사용하는 방법은 무엇입니까?
그러나 더 큰 특정 색인 printf
을 시도하면 잘못된 번호가 표시됩니다.
for(B_index=0,checker=0; B_index<SIZE&&!checker; B_index++)
{
checker=scanf("%d",&B[B_index]);
if(checker==EOF)
{
checker=1;
}
else if(checker<1)
{
printf("error");
return 1;
}
}
printf("%d",B[1]);
이것은 C 배열이 바운드 검사를 수행하지 않는 것입니다. 즉, 배열의 요소에 대한 액세스가 배열의 바깥에 있는지 여부를 컴파일러가 확인하지 않기 때문입니다. 왜? 두 가지 이유 : 1. 런타임시 C 배열이 포인터로 변환되므로 배열의 요소에 액세스 할 때마다 포인터 산술 연산을 수행하는 것과 같습니다. 2. 언어에 더 많은 속도를 제공하기 때문에 안정성과 속도 사이에 트레이드 오프입니다. –