C언어 코드에 문제점이뭔지 궁금합니다.
글쓴이: NaziCube / 작성시간: 수, 2015/12/30 - 5:42오후
C언어 책보며 문제가 나와서 하는도중에 나온 오류같은건데 일단 맨처음짠게
#include <stdio.h> int main(){ int df,arr[df],ct=0; printf("몇개의 정수를 입력 할 것인가 : "); scanf("%d", &df); printf("정렬할 숫자 "); for(;ct<df;ct++){ printf("입력 : "); scanf("%d", &arr[ct]); } return 0; }
이거입니다. 여기서 문제점이 df에다가 12를 입력하면 arr[ct]에 12개의 정수를 입력이 가능할 줄 알았는데 막상해보니 6개만 입력이 가능해서
#include <stdio.h> int sort(int * ptr); int main(){ int df; printf("몇개의 정수를 입력 할 것인가 : "); scanf("%d", &df); sort(&df); return 0; } int sort(int * ptr){ int arr[*ptr], ct=0; for(;ct<*ptr;ct++) scanf("%d", &arr[*ptr]); }
이렇게 바꾸어봤는데 여기서는 정상작동을 합니다.
비슷하게 코드를 만든거같은데 뭐가 문제일까요?
Forums:
printf()로 디버그 해보세요.
아래 코드는 잘 됩니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
다음 둘 중의 하나로 오동작 할 것 같습니다. 1.
다음 둘 중의 하나로 오동작 할 것 같습니다.
1. sort() 함수의 ct 변수가 오염되거나
2. sort() 함수에서 다른 함수를 호출했다 복귀한다음 arr[*ptr] 을 다시 읽을 때 괴상한 값이 읽히거나.
-.-
int df,arr[df],ct=0;
요게 말이 안되는듯 한데요... 잘~ 생각해보시길...
아마 컴파일러에 따라 다른 결과가 나올 수도 있을 것
아마 컴파일러에 따라 다른 결과가 나올 수도 있을 것 같습니다.
일단, df가 결정이 되게 전에 arr이 compiler에서 초기화 되기 때문에 원하시는 결과가 안나올 것 같네요. 원하시는 결과를 바라신다면 다음과 같이 만들면 되지 않을까 싶습니다. 물론 이 코드는 컴파일러에 따라 다른 결과를 보일지 모르겠지만 gcc 3 이상에서는 동작할 겁니다. (gcc 2에서는 declare 에러가 발생할 겁니다. gcc2는 코드 중간에서 변수 선언이 안되거든요.)
P.S
코드는 code tag block으로 감싸 주시면 제대로 보여줄 수 있습니다. 일단 본문은 제가 수정해 드렸습니다.
맨처음에 int df,arr[df] 이게
맨처음에 int df,arr[df] 이게 가능한가요?
df를 초기화 하지도 않았고 쓰레기값 들어있을텐데 그 값으로 arr[df]를 선언해버리면..
int df, *arr, cf = 0으로 선언 해놓고 df 받고난후 메모리할당하시는게 나을듯 싶어요
댓글 달기