[C언어] scanf와 scanf_s 차이

윤형준·2023년 1월 25일
0
post-thumbnail

C언어에 대한 입문을 시작했다.

근본 없이 공부를 이어나갈 수 없으니 빠르게라도 한 번 훑고 컴퓨터구조나 자료 구조에 대해서 공부하면 좋을 것 같다!

python을 먼저 배웠기 때문에 변수가 무엇이고 상수가 무엇이고 입출력이 무엇인지는 알고 있었는데 scanf와 scanf_s 차이가 궁금해서 적게 되었다.

visual studio code를 이용해서 책을 보며 따라하고 있었는데

책 예제에 scanf_s가 있는 그대로 치니 실행이 되지 않고 scanf를 치니 되었다.

차이가 무엇일까?

did you mean 'scanf'?

scanf는 아는 것 같은데.. visual studio code라서 scanf_s를 모르는 건가? 싶어서 여기저기 찾아보았다. 나도 사실 뭔지 몰라서

끝?

다른 블로그를 더 찾아보니

scanf_s는 오버플로우 방지가 가능하다고 한다.

int, float, double 같은 자료형은 자료형 크기가 일정하기 때문에 자료형을 입력받는데 문제가 없지만,

char, char[]형태인 문자, 문자열에서는 입력받을 크기를 반드시 뒤에 입력해주어야 합니다.

scanf_s("%s", 문자열변수명, sizeof(문자열변수명)); 을 써주면 입력 받을 수 있다고 한다.

결론

  • 기본으로 사용하는 표준 입력 명령어는 scanf() 함수
  • but, scanf() 함수를 사용하면 입력 크기에 제한이 없어서 지정된 크기보다 더 많은 양을 입력받는 버퍼 오버플로(buffer overflow)라는 메모리 문제가 발생할 수 있다.
  • 그래서 이 점을 보완해 visual studio에서 사용할 수 있도록 새로 만든 명령어가 scanf_s() 함수
  • 크기를 지정한다는 것 외에 둘은 다른 점이 없고 사용법도 거의 같다!!

Visual Studio를 쓸 거면 scanf_s를 써라~!

profile
매일 조금씩 성장하는 개발자

0개의 댓글