scanf 로 문자열을 받기 위해서는 실제 문자열이 들어갈 메모리를 확보해야 합니다.
하지만 char *n; 은 "문자열을 가리킬 수 있는 변수"일 뿐, 실제로 문자열이 들어갈 메모리를 확보하는 것은 아닙니다.
심지어, char *n 은 초기화가 되지 않은 지역변수로, 누구도 알지 못하는 장소를 가리키고 있습니다.
따라서, 6번째 줄의 scanf 는 "문자열을 입력받아, 누구도 알지 못하는 장소에 저장하라" 라는 의미가 되며
이러한 프로그램의 수행 결과는 정의되어 있지 않습니다. (undefined behavior)
대부분의 경우 런타임 에러를 내뱉으면서 프로그램이 강제종료 되겠지만, 실행 환경이 달라지면 한참 후에 잘못된 결과를 내뱉을 수도 있고, 심지어 아주 우연히 프로그램이 정상 동작하는 것 처럼 보일 수도 있습니다.
jeonggu223 3년 전
저는 숫자를 문자열로 받아 마지막 숫자가 홀수인지, 아닌지를 판단하여 바로 답을 출력하게끔 구현을 했습니다.
제 환경에서는 잘 돌아가는 코드인데 제출할 경우 NeverBeNull 런타임에러가 발생합니다.
그래서 long long형태로 구현을 하여 해결하였지만 왜 런타임에러가 뜨는 것인지에 대해서 궁금하여 질문합니다. 알려주시면 감사하겠습니다!