작성
·
184
0
void print_binary_loop(unsigned long n)
{
int i, j, ary_num = 0;
int bin[] = {0};
for (i = 0; n > 0; n = n / 2, i++)
{
if ((n / 2) != 0)
bin[i] = n % 2;
else
bin[i] = 1;
ary_num += 1;
}
for (j = ary_num - 1; j >= 0; j--)
printf("%d", bin[j]);
printf("\n");
}
아직 c언어 배열은 안배웠지만 파이썬 배열과 다를게 없다 생각해서 기본적인 문법만 구글링하면서 써봤습니다.
제가 직접 루프를 짜봤는데 교수님꺼보단 많이 복잡하지만,,,
실행시킬 때마다 이런 오류가 뜨고 무시를 누르면 잘 실행이 되기는 합니다. 이 오류를 고치고 싶은데 방법을 모르겠습니다 ㅠ
답변 1
0
답변이 늦어 죄송합니다
bin 배열은 크기가 1 입니다. 원소가 0 하나 밖에 없으며, 하나의 int 원소만 들어갈 수 있는 배열입니다. (질문자님께서 이렇게 선언을 하셨습니다)
배열은 한번 크기를 정하면 자유자재로 늘렸다 줄였다 할 수가 없습니다. 그냥 고정 크기에요.
즉, bin[0] 만 쓸 수 있다는 것입니다. bin[1] 부터는 배열 크기를 넘어선, 즉 할당받지 않은 메모리에까지 침범하는 일인 것이라서 런타임 에러가 발생하게 됩니다.
근데 질문자님의 for문을 보면 bin[i] 를 쓰고 있기 떄문에 i 에는 어떤 값이든 들어갈 수가 있어요.
n 이 0 이 될 때까지 2 로 계속 나눠지는 수 만큼 i 가 증가하겠죠..
그러니 bin[1], bin[2] ... 에도 접근할 수 있을테니 에러가 나는 것입니다.