글번호
770033

C 언어 실습 중 scanf 등의 함수 오류 처리 안내

작성자
이병래
조회수
574
등록일
2025.10.14 16:16
수정일
2025.10.14 16:26

C프로그래밍 수강 학생 여러분,


Visual studio를 이용하여 실습을 할 때 교재나 강의의 예제에 있는scanf() 함수를 사용할 경우 에러가 발생할 수 있습니다.


scanf() 함수는 C 언어의 표준함수로 제공되는 함수입니다.

그런데 scanf() 함수는 입력을 받을 변수의 기억공간에 비해 실제 입력의 양이 더 많을 경우

버퍼 오버플로와 같은 치명적인 문제를 야기하는 위험성이 있습니다.

이러한 위험을 방지하기 위해 마이크로소프트의 visual studio에서는 이 함수 대신 scanf_s()라는 함수의 사용을 권고하고,

표준함수인 scanf() 함수를 사용하면 에러로 처리하기 때문입니다.


그런데 scanf_s()와 같은 함수는 C언어의 표준함수는 아니어서 gcc와 같이 C언어의 표준을 따르는 컴파일러에는 제공되지 않습니다.

그래서 본 과목에서는 표준에 있는 함수를 중심으로 다루고 있습니다.


마이크로소프트의 visual studio에서 해결 방법은 몇 가지가 있습니다.


[방법1]

솔루션 탐색기에서 해당 프로젝트를 우클릭하여 '속성(R)' 메뉴에서 'C/C++'의 '일반'을 선택하면 우측 화면에 'SDL 검사' 항목이 있습니다. 이를 '아니오'로 선택합니다.


[방법2]

프로그램의 첫 줄에 다음 문장을 넣습니다.


#define  _CRT_SECURE_NO_WARNINGS


또는


#pragma warning(disable:4996)


[방법3]

scanf 함수 대신 scanf_s 함수를 사용합니다. 

int, double과 같은 기본 자료형의 경우는 동일한 방법으로 사용합니다.


int a;

scanf_s("%d", &a);


만일 문자열 입력을 하는 경우 버퍼의 크기를 알려줍니다.


char str[100];

scanf_s("%s", str, 100);


참고하시기 바랍니다.


이병래 교수

첨부파일
첨부파일이(가) 없습니다.