Y가 쓰는 노트공간

이것저것 탐구하고 기록하는 곳

공부/C

C scanf 를 사용할 때 뒤에 _s가 붙는 이유

Yun__ 2023. 3. 5. 16:34
728x90

C 언어를 다루면서

어떠한 문자 혹은 숫자를 입력받고 싶을 때

scanf()를 사용합니다.

 

숫자를 입력받고 싶을 때

scanf(% d, &num 1);

 

정수를 입력받아서num 1 변수의 주소값(&)에 저장하는 식이죠 

 

저는 Visual studio 프로그램에서

scanf()를 사용하고 컴파일 시도를 할 때마다

아래의 에러메시지가 생성되며 실행되지 않았습니다.

scanf 대신 scanf_s 를 대체하라는 메시지

 

혼자 코딩연습할 때야 scanf_s로 타이핑을 더 해서

사용하고 있었습니다.

 

다만 온라인 코딩문제 풀이를 시작하면서

Visual studio에서 디버깅을 하며 코딩하고

실행되는 것을 확인한 후에

문제 사이트에 붙여 넣기를 하면 scanf가 기능하지 않습니다.

 

여기서 불편함이 생겼고 

또 의문이 들었습니다.

 

scanf_s로 대체해서 사용하는 것이 통용되는 규칙이 아니었구나.

왜 이렇게 사용하지?라는 의문이 말이죠

 

그 이유

 

그 이유는 C4996 에러메시지에 있습니다.

scanf는 안전하지 않기 때문이죠.

 

안전하지 않은 이유는

scanf가 받을 수 있는 입력 데이터의 크기에 초과하는 값이 입력될 경우

초과된 데이터가 다른 메모리를 침범해 오류가 발생할 수 있기 때문이라 합니다.

 

이를 막기 위해 일정 크기까지만 입력받는

scnaf_s를 사용하라 권고하는 것이죠.

 

 

 

해결방법

 

에러메시지에 나와 있는

#define CRT_SECURE_NO WARNINGS를 

코드 최상단에 입력해 두는 것입니다.

이 경우 scanf()를 사용하더라도 문제없이 실행이 잘 됩니다.

 

해결

 

scanf 아래에 녹색 물결이 있죠.

경고메시지가 발생해서 그렇습니다.

 

사소한 경고메시지

 

C6031이라는 경고메시지가 발생하긴 하지만

실행하는 데 문제가 없고, 다른 코딩사이트 들 간에도

문제가 생길 일 없으니 앞으로 소스 파일을 추가할 때마다

사용할 것 같습니다.

 

728x90

'공부 > 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