rndrnjs2003   1년 전

scanf("%d",&testCase); 라고 작성시 5를 입력하면 다음과 같이 0이 출력됩니다.

scanf.PNG

허나 scanf("%d ",&testCase); 라고 작성시에는 0이 출력안되는데 이유를 알고 싶습니다.

또한 처음 코드 작성시에는

char *arr;를 선언후 gets() 함수를 사용하니 arr배열 초기화를 하라고해서

char *arr=NULL; 로 초기화 선언후 사용하려니까 

띠용.PNG이런 오류가 떴습니다. 이 오류가 발생한 이유에 대해서도 알고 싶습니다..


cake_monotone   1년 전

우선 scanf_s, printf_s, gets_s 같은 Visual c++에서만 제공하는 함수를 사용하면, 컴파일 에러를 만나게 되실겁니다.

https://www.acmicpc.net/blog/v... << 참고하시면 좋습니다.


또한 scanf 에서 공백의 의미는, 입력버퍼에서 공백 ' ', 개행 문자 '\n' ('\r'), 탭 문자 '\t' 를 무시하고 지나가겠다는 의미입니다.

입력으로

2
OX
X

이렇게 주어진다면

입력버퍼는 이렇게 차있겠죠.

2 \n O X \n X

scanf("%d")로만 입력을 받아낸다면

\n O X \n X

입력버퍼에는 아직 \n이 남아있습니다. 이 상태로 gets 함수를 호출할 경우, \n 까지 문자열을 받아오므로 arr은 '\0' 하나만 차있는 빈 문자열이 되구요 


하지만 scanf("%d ")로 받는다면, \n 은 전부 무시하면서 지나가므로

O X \n X 만 남아있겠죠. 이 상황에선 gets 가 정상적으로 "OX" 문자열을 받아옵니다.


그리고 gets는 배열을 동적할당해주지 않습니다.
포인터를 사용하시려면 먼저 동적할당해주세요.

rndrnjs2003   1년 전

와 정말 도움이 되었습니다! 감사합니다.

댓글을 작성하려면 로그인해야 합니다.