VB6.0은 엄청 오래전에 만든 통합개발환경이죠.
최근 2010까지 나오면서 많은 분들이 VB2008이나 VB2010으로 많이 갈아 타셨을 겁니다.
VB2010을 설치 하시고 scanf()함수를 사용하면 이전 VB6.0에서 볼수 없는 경오 메세지를 보고 당황 하시는 분들이 많으시더라고요.
다음과 같이 간단한 코드를 컴파일 하면 아래의 경고문이 우리를 반겨 줍니다.
#include <stdio.h> void main(void){ char input[10]; scanf("%s", input); printf("%s", input); }
[문제의 경고문!]
scanf()함수의 경우 입력을 받을 때, 입력을 저장하는 변수의 크기를 명시하지 않고 사용하기 때문에
프로그램의 보안상 취약점이 생길 수 있다고 scanf_s()를 사용하고 합니다.
경고를 무시하고 그냥 실행을 시키면 사용자로 부터 변수의 크기 이상의 입력을 받을 경우 프로그램이 뻗어 버립니다....
그렇다면 scanf() 대신에 scanf_s()로 바꾸면 되는가?
그냥 함수명만 바꾸서 실행 시켜 봐습니다.
역시나 무참히 뻗어 버리는 프로그램느님....
scnaf()와 scnaf_s()는 매겨변수 수가 다르기 때문에 scnaf_s()를 사용할 경우 마지막에 변수의 크기를 명시해 주어야 하는데요.
#include <stdio.h> void main(void){ char input[10]; scanf_s("%s", input, sizeof(input)); printf("%s", input); }
sizeof()함수를 이용해서 input변수의 크기를 알아내서 scanf_s()의 마지막 매개변수로 넣어 주시면 됩니다.
scnaf_s()함수를 사용하더라도 변수의 크기 보다 큰 입력은 받지 않으니 입력 받는 변수의 크기를 잘 정해 줘야 합니다...
'Part 3 > ¶ Programming' 카테고리의 다른 글
[iPhone]Table Views, Navigation, and Arrays (0) | 2011.11.15 |
---|---|
[마프]신호등 만들기 (0) | 2011.11.10 |
ZeuS Source Code!!!! (0) | 2011.05.13 |
Design Principle (0) | 2011.03.24 |
Visual Studio 객체 브라우저 (0) | 2010.09.11 |