최고의 답변자
간단한 C언어 예제. scanf 오류

질문
-
간단한 펙토리얼 구하기 예제를 만들었고 코드는 다음과 같습니다.
코드블럭에서는 돌아가는데 비쥬얼 스튜디오에서는 돌아가지 않네요.
구체적으로 어떤 문제인지 알고 싶습니다.
코드
====
#include <stdio.h>
int factorials(int result);
void main(void)
{
int data = 0;printf("!값을 구하고 싶은 수를 입력 =>");
scanf("%d", &data);
printf("\n%d\n", factorials(data));}
int factorials(int result)
{
if (result == 1)
return 1;else
return result*factorials(result - 1);
}====
답변
모든 응답
-
안녕하세요, 김철민 님.
Microsoft MSDN의 Forum 사이트를 방문해 주셔서 감사합니다.
문의 하신 "간단한 C언어 예제. scanf 오류" 문의에 대한 답변을 드리겠습니다.문의해 주신 내용을 그대로 Visual Studio 2015 / Windows 10 에서 실행했는데 결과 값이 잘 보여집니다.
단 scanf 함수의 경우 Buffer Overrun 때문에 deprecate(폐지)된 함수 이므로 disable deprecation하기 위해 _CRT_SECURE_NO_WARNINGS을 사용하라는 경고 메시지가 나옵니다.
1>c:\users\smpark\documents\visual studio 2015\projects\scanftest\scanftest\scanftest.cpp(15): warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
_CRT_SECURE_NO_WARNINGS을 C/C++ 전처리기 정의에서 추가하는 방법은 다음 웹 문서를 참고하십시요.
http://norus.tistory.com/7
비주얼 스튜디오 2013에서 "This function or variable may be unsafe" 에러프로젝트 속성에서 C/C++ 전처리기에 _CRT_SECURE_NO_WARNINGS;를 추가합니다. 반드시 세미콜론(;) 추가하십시오.
프로젝트 빌드후 실행하면 다음과 같이 잘 실행됨을 확인하실수 있습니다.C:\Users\smpark\Documents\Visual Studio 2015\Projects\scanftest\Debug> scanftest.exe
!Please Enter Number for Factorials =>5120
제시해 드린 답변이 도움이 되었기를 바랍니다.
답변이 문제 해결에 도움이 되었다면 답변으로 채택을 부탁드립니다.
하지만 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해주시기 바랍니다 -
단 scanf 함수의 경우
Buffer Overrun 때문에 deprecate(폐지)된 함수 이므로 disable deprecation하기 위해 _CRT_SECURE_NO_WARNINGS을 사용하라는 경고 메시지가 나옵니다.
1>c:\users\smpark\documents\visual studio 2015\projects\scanftest\scanftest\scanftest.cpp(15):warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
_CRT_SECURE_NO_WARNINGS을 C/C++ 전처리기 정의에서 추가하는 방법은 다음 웹 문서를 참고하십시요.
http://norus.tistory.com/7
비주얼 스튜디오 2013에서 "This function or variable may be unsafe" 에러프로젝트 속성에서 C/C++ 전처리기에 _CRT_SECURE_NO_WARNINGS;를 추가합니다. 반드시 세미콜론(;) 추가하십시오.
프로젝트 빌드후 실행하면 다음과 같이 잘 실행됨을 확인하실수 있습니다. -
2015버전을 사용하고 있고
심각도코드설명프로젝트파일줄
오류 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. ConsoleApplication1 e:\dropbox\visual studio\consoleapplication1\consoleapplication1\factorials.c 10 라는 에러 메세지가 뜹니다. 이 상태로 실행시키면 빌드에서 오류가 발생하였다고 뜹니다. -
프로젝트 속성 창에서 "구성속성" -> "C/C++" -> "일반" 에 보시면 "SDL 검사" 라는 항목이 있는데, 이항목을 보통 "아니요" 로 설정해놓기 때문에 C4996이 경고로 처리되고 컴파일이 됩니다. 만약 이 항목을 "예"로 설정하게 되면 C4996 이 오류처리되어 컴파일이 실패하게 되니, 확인하시기 바랍니다.
좀더 보안이 적용된 코드를 확실하게 사용하고 싶은 경우 SDL 검사를 "예"로 설정해놓고 사용하는 경우가 있는데, 지금 그렇게 사용하신것 같네요. 이 항목을 "예"라고 사용한것이 잘못되었다는 뜻이 아닙니다~ 상황에 따라 선택해서 사용하면 됩니다~