본문 바로가기

C&C++

[C/C++] scanf와 scanf_s

[scanf_s 사용할 때 주의할 점!!!]



이전 백준 알고리즘 문제를 풀 때, free하는 부분이 잘 안되서 문자열 동적할당을 포기하고 다른 방법을 이용해 문제를 푼 적이 있다.


근데.. scanf와 scanf_s의 차이를 몰라 생긴 나의 무지의 문제였다 ㅠ^ㅠ



우선, scanf 사용시 error가 날 때 세 가지 방법이 있는데


(1) scanf_s 를 사용한다!

(2) #define _CRT_SECURE_NO_WARNING 를 코드 맨위에 써준다!

(3) #pragma warning(disable:4996)를 써준다!


위 방법들을 사용하면 ERROR가 나지 않는다. 하지만 (1)을 사용할 시 주의해야 할 점이 있다.


scanf_s로 문자나 문자열을 받을 때에는 size도 인자로 주어야 한다는 것!!!


scanf("%s", str); // scanf는 이렇게 써도 되지만

scanf_s("%s", str, sizeof(str)); // scanf_s는 이렇게 써야 한다!!!!!


이걸 몰라서.. 안되는 거였다니 바보바보바보


그냥 scanf 쓸래 이제...


찾아보니 scanf_s는 C11에 표준으로들어왔지만 Windows에서만 사용할 수 있는 함수인가보다


어떻게 사용하는지 C11 표준 문서를 보고 싶었는뎅 무료가 아니군...ㅠㅠ



결론 : 앞으로는 scanf를 쓰자*^^*

'C&C++' 카테고리의 다른 글

[C/C++] 이분탐색으로 LIS 구하는 방법  (0) 2019.02.24
[C/C++] for문 조건에 따라 다르게 만들기  (0) 2019.01.08