156
2011-05-26 11:20:51
0
제가 보면서 눈에 밟힌것들만 말씀드리자면..
1. decimal=result=input=i=size=0;
여기서 decimal은 int가 아니라 int *죠? 배열의 전체 이름만 쓰면 그건 그 배열을 가리키는 포인터거든요. 포인터에 0이라는 숫자를 넣으면 그건 배열 안의 값을 바꾸는게 아니라, 그 배열이 다른 곳을 가리키게 만드는거죠.
decimal 배열을 0으로 초기화하고 싶다면 직접 명시적으로 해주시는게 확실하실거 (for문같은거 사용하면 명확하게 할 수 있잖아요)
2. for(i=0; i<1025; i++);
{
decimal[i]=input%2;
...
}
이 부분에서는 i가 0에서 시작해서 1024까지 돌겠죠?
근데 배열 int decimal[1024]; 요놈은 1024개의 자리가 만들어지니까, 결국 decimal[0]에서 시작해서 decimal[1023]까지 만들어집니다.
그렇기 떄문에 decimal[i]하고 쓰면 i가 1024가 되는 순간에 decimal 배열의 공간을 벗어나버립니다.
for문을 쓸때는 꼭 이게 어디부터 어디까지 도는건가를 생각해보셔요.
3. result=decimal;
result는 int값이 들어가야 하는 것이고, decimal은 배열인데, 어떻게 int값이 잔뜩 모인 배열이 int값 하나 안으로 들어가겠습니까.
그리고 애초에 이 코드에서 result는 결과적으로 값 저장 후에 딱히 쓰이는곳이 없는것 같은데요? 쓰이는곳이 없는걸 만들면 에러는 아니지만 워닝 뜰거같습니다. (코딩 해본게 언제적인지 기억이 안나서 정확히는 모르겠다는) 이 줄은 아예 지워버리시는게.
만약에, 그냥 2진수 숫자를 얻고싶어서 쓰신거라면요. 애초에 처음 받은 int input 자체가 2진수입니다. 아시죠? 그걸 우리가 printf 같은거 할때 decimal로 출력해달라고 하니까 10진수로 보여주는거지, binary로 보여달라고 하면 2진수로 보여주고 그러는겁니다. 저런식으로 복잡하게 구할 문제가 아니란거지요.
4. size=sizeof(decimal)/sizeof(decimal[0]);
이부분은, decimal 배열에서 어느 위치까지 사용했나를 알고 싶으신거 같은데요.
그건 decimal 배열의 크기를 얻어서는 모르는 문제입니다.
왜냐하면 배열은 선언된 이상, 프로그램 시작할때 이미 메모리에 영역이 통째로 잡혀 있거든요. (dynamic 하지 않고 static 하다는 얘기로 배우실겁니다)
그래서 저런식으로 크기를 얻어오면, 어떤 input을 넣던간에 (크든 작든간에) 언제나 decimal 배열의 크기는 같으니 같은 값이 size에 들어가죠. 한마디로 의미 없단 얘깁니다.
차라리 for문같은걸 사용해서 제일 처음 1 나오는게 (뒷자리부터면 제일 마지막 1이 나온게) 몇번쨰 자리인지를 보는게 빠르겠네요.
그리고 그건 따로 만들 필요가 없이 위쪽에 decimal 배열에 숫자 채워넣는 for문에서 같이 해주면 되는거구요. 그렇겠죠?