C 언어를 다루면서
어떠한 문자 혹은 숫자를 입력받고 싶을 때
scanf()를 사용합니다.
숫자를 입력받고 싶을 때
scanf(% d, &num 1);
정수를 입력받아서num 1 변수의 주소값(&)에 저장하는 식이죠
저는 Visual studio 프로그램에서
scanf()를 사용하고 컴파일 시도를 할 때마다
아래의 에러메시지가 생성되며 실행되지 않았습니다.
혼자 코딩연습할 때야 scanf_s로 타이핑을 더 해서
사용하고 있었습니다.
다만 온라인 코딩문제 풀이를 시작하면서
Visual studio에서 디버깅을 하며 코딩하고
실행되는 것을 확인한 후에
문제 사이트에 붙여 넣기를 하면 scanf가 기능하지 않습니다.
여기서 불편함이 생겼고
또 의문이 들었습니다.
scanf_s로 대체해서 사용하는 것이 통용되는 규칙이 아니었구나.
왜 이렇게 사용하지?라는 의문이 말이죠
그 이유
그 이유는 C4996 에러메시지에 있습니다.
scanf는 안전하지 않기 때문이죠.
안전하지 않은 이유는
scanf가 받을 수 있는 입력 데이터의 크기에 초과하는 값이 입력될 경우
초과된 데이터가 다른 메모리를 침범해 오류가 발생할 수 있기 때문이라 합니다.
이를 막기 위해 일정 크기까지만 입력받는
scnaf_s를 사용하라 권고하는 것이죠.
해결방법
에러메시지에 나와 있는
#define CRT_SECURE_NO WARNINGS를
코드 최상단에 입력해 두는 것입니다.
이 경우 scanf()를 사용하더라도 문제없이 실행이 잘 됩니다.
scanf 아래에 녹색 물결이 있죠.
경고메시지가 발생해서 그렇습니다.
C6031이라는 경고메시지가 발생하긴 하지만
실행하는 데 문제가 없고, 다른 코딩사이트 들 간에도
문제가 생길 일 없으니 앞으로 소스 파일을 추가할 때마다
사용할 것 같습니다.
'공부 > C' 카테고리의 다른 글
포인터 (0) | 2023.03.13 |
---|---|
C언어 goto (0) | 2023.03.11 |
3일차) 연산자 정리 (0) | 2023.02.20 |
2일차) 이산수학과 변수 (0) | 2023.02.15 |
1일차) 주석과 printf (0) | 2023.02.14 |