scanf와 scanf_s

마이크로소프트 사에서는 자주 사용하는 개발 IDE인 Visual Studio에서
scanf 사용을 권하지 않는다.

하위 버전에서는 경고를 띄우지만 최상위 버전에서는
SDL(security development lifecycle) 검사가 체킹 되어 있어
비주얼 스튜디오에서만 지원하는 scanf_s를 사용하지 않으면
오류가 뜨게 되어있다.

scanf_s()는 문법은 scanf()와 다를게 거의 없다.

그러나 문자열을 입력받는 서식문자 %s를 사용할 땐, 저장할 문자열 뒤에 최대 문자열 입력 개수를 인자로 한 개 더 넣어주어야 한다.



1
2
char name[10];
scanf("%s", name);
cs
이전 scanf 사용이 이랬었다면,



1
2
3
#define MAX_LEN 10
char name[MAX_LEN];
scanf_s("%s", name, MAX_LEN);
cs
scanf_s를 사용해야 할 때
이런 식으로 인자를 한 개 더 추가해 주어야 한다.

참고로 비주얼 스튜디오에서
scanf_s를 사용할 때 문자열 입력을 받는 때에
문자열 길이를 지정해 주지 않아도 문법 오류가 뜨지 않는데, 실행했을 때는 오류가 난다.
문법 오류가 나지 않아도 문법 오류이다.

이는 오묘한 문법때문인데, 
scanf_s를 이렇게 사용할 때의 케이스가 있기 때문이다.


1
2
3
4
5
#define MAX_LEN 10
char name[MAX_LEN];
int grade;
int age;
scanf_s("%s %d %d", name, MAX_LEN, &grade, &age);
cs
문자열을 입력 받을 때 저장할 문자열 뒤에 최대 문자열 입력 개수를 적어주고 그 뒤에 입력받는 변수를 두면 된다.

이렇게 scanf_s에서 한번에 여러 데이터를 입력 받을 때의 케이스가 있기 때문에?
저장할 문자열 뒤에 최대 문자 길이를 적어주지 않아도 오류가 따로 나지는 않는 듯 하다.

문법 오류 문구가 나지 않는 문법 오류.


댓글

이 블로그의 인기 게시물

레나 리버싱 Tut.ReverseMe1 풀이 1

리버싱 연습