기본적으로 그대로 쓰면 이렇게 된다. 이는 마이크로소프트뿐이라고 한다.# define_CRT_SECURE_NO_WARNINGS를 입력하면
이렇게 쓰면 돼.
다른 방법으로는 프로젝트에 properties를 클릭하고 들어가서_CRT_SECURE_NO_WARNINGS를 넣으면 된다.
그러면 번거롭게 그때부터는 #define_CRT_SECURE_NO_WARNINGS를 작성하지 않아도 된다.
gcc 컴파일러는 그 과정을 거치지 않아도 된다고 한다.
그 과정은 마이크로소프트 컴파일러뿐이다.
그런데 왜 scanf 함수는 앰퍼센드: &를 사용해야 하는지 앰퍼샌드를 변수명 앞에 붙여 쓰면 메모리의 주소를 받는다는 것이다.
scanf 함수는 사용자가 콘솔 창에 입력하면 주소에 해당하는 메모리에 값이 입력된다.
마이크로소프트 개발 환경은 scanf에 특정한 경우에 정의된 주소가 아니라 다른 주소까지 덮어(예를 들어 10, 11, 12까지) 메모리에 값이 들어가면 보안 문제가 생긴다고 한다. (왜 생기는지 버퍼 오버플로우 때문인지)
그래서 마이크로소프트에서 scanf_s 를 사용하는 것을 권장한다.
왜 그럴까?