본문은 홍정모 따라 배우는 C언어 3.3강의 내용을 활용하여 작성되었습니다. 홍정모를 따라하며 배우는 C언어는 다음 웹사이트에서 수강할 수 있습니다. 타베시++의 성원에 힘입어 새롭게 개발된 C언어로 시작하는 프로그래밍 입문 강의입니다. ‘타베 씨’와 함께 프로그래밍 인생을 업그레이드해보세요. 입문 초급 프로그래밍 언어 C 온라인 강의 C 언어, 씨 언어, C 강의, 타베 씨, 홍정모, 프로그래밍 inflearn.comscanf의 사용법은 printf의 사용법과 비슷하다. 다음 예를 보자.여기서 scanf가 printf와 다른 점은 변수 앞에 &(Ampersand)를 붙인다는 것이다. 이를 마이크로소프트 컴파일러로 컴파일하려면 scanf이기 때문에 안전하지 않기 때문에 scanf_s 사용을 권장한다는 말이 있다. 이를 해결하기 위해서는 첫 번째 줄에 이 줄을 작성하면 된다.그럼 변수 앞에 &을 붙이는 이유를 알아보자. 프로그램을 실행할 때 scanf 함수를 만났을 때 scanf 함수를 실행하기 위해 변수의 주소를 요구한다. 따라서 이 변수의 주소를 보내기 위해 변수 이름 앞에 & 을 작성한다. 그리고 scanf 함수는 데이터를 입력받아 주소 안에 넣는다. 하지만 마이크로소프트는 변수의 주소를 받아 원래 의도한 데이터 이상의 데이터를 입력하도록 해 주소 밖의 데이터를 수정할 수 있다는 문제점을 우려했다. 따라서 메모리 주소에 작성할 데이터의 크기를 정하는 함수인 scanf_s를 만든 것이다.
정리하면 scanf는 메모리의 주소를 받아 직접 액세스하여 데이터를 입력하는 구조로 되어 있다. 상기 예에서 scanf 함수를 거치는 순간 i의 값이 입력된 값으로 바뀐다. 따라서 printf에서 i의 값을 출력하고자 할 때 scanf 함수로 바뀐 값이 출력된다.