일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- atmega128
- assignment1
- #9
- cs231n
- Features
- softmax backpropagation
- Floating
- assignment
- leetcode
- backward pass
- neural net
- autoencoder
- Backpropagation
- impl
- 풀다운저항
- pyTorch
- Solution
- palindrome
- Circuit
- 회로
- NotFoundError
- Big size image
- KNN
- 풀업저항
- pullup
- error
- two-layer neural net
- TensorFlow
- Softmax
- pulldown
- Today
- Total
코딩공부
Visual Studio의 scanf와 scanf_s 본문
최근 있었던 수업중에 이해가 안되는 일이 있었다.
원래 내가 개인노트북에서 사용하던 visual studio는 2010버전이였는데 학교 컴퓨터에는 2013버전이 깔려있었다. 2010버전에서는 scanf를 사용하면 오류가아닌 경고문구만 뜨게되어서 굳이 scanf_s를 사용하지 않고 익숙한 scanf를 사용해 왔는데 2013버전은 그게 안되더라...
코드를 보자!
이 버전은 2017버전이다! (해보려고 최신판으로 다시설치했다...)
이런 코드를 빌드하면 과연 어떻게될까? 빌드가 될까?
당연히 안된다. (아오 빡쳐)
사실 중요한건 안된다는 사실보다 '왜'안되냐가 더 중요한것이다! 그럼 왜 안될까?
scanf라는 함수는 예전부터 사용되던 입력 함수인데 항상 제기되던 문제가 있다고한다. scanf_s의 s가 security라는것을 생각하면 어떤 문제일까? 당연히 보안관련 문제가 꾸준히 제시되어 왔던 것이다! 버퍼 오버플로우, 버퍼 오버런에 관한 문제인데 쉽게 얘기하면 버퍼의 크기를 명확히 지정해주지 않아서 생길 수 있는 문제인 것이다! 그래서 만들어진 대체함수가 scanf_s이다.
이 코드를 보자.
scanf_s를 사용해서 빌드한 사진이다. 보다시피 빌드는 성공했다! 그런데 빌드출력창의 글들을 보면 문제가 있다고 징징댄다.(그럼 빌드를 안해주던가...)
그래서 무슨얘기인가 살펴보면
이렇다고 한다!
헤더파일상에서 scanf_s를 뜯어볼 능력이 된다면 더 자세한 설명이 가능하겠지만 아직은 능력밖의 일이라...ㅠㅠ... 그런 나를 위해 나온 내용을 보면 scanf_s에 unsigned int형의 인수가 한개 더 필요한데 왜 안주냐!! 이거다. 위의 scanf에 관한 이야기를 할때 버퍼의 크기를 지정해주지 않아서 문제가 생긴다고 했었다. 그럼 scanf_s에서는? 버퍼의 크기를 지정해달라 이거다! 수정된 코드를 보자.
정말 빌드창이 깔-끔해졌다! scanf_s에서는 문자 또는 문자열을 입력 받고싶으면 그 버퍼의 크기를 지정해 주어야 한다는 의미이다! 물론 문자형(character)형 같은 경우 크기가 1이므로 sizeof(c)의 자리에 그냥 숫자로 1을 써주어도 되지만 sizeof()를 사용해 주면 앞으로 문자열을 사용할때에도 편하게 쓸 수 잇을것으로 생각된다!
아 그리고 중요한 프로그램이라면 당연히 scanf_s를 쓰는게 맞지만 귀찮고 꼭 scanf_s를 안써도 되고 scanf가 익숙하다면 코드의 맨 위에
#define _CRT_SECURE_NO_WARNINGS
라고 입력해주면 그냥 scanf를 사용해도 오류가 발생하지 않고 잘 작동된다!
scanf_s... 처음에는 왜만들었는지 몰라서 scnaf 못쓴다는게 안타까웠는데 보안상의 문제라니... 이제 scanf_s로 연습해야겠다.
'Language > C언어' 카테고리의 다른 글
문자열에 관한 고찰(1) (0) | 2017.10.08 |
---|---|
Palindromic 수 찾기 (0) | 2017.10.01 |
2차원 배열과 포인터에 대해 Araboza (0) | 2017.09.26 |
Scanf와 & (2) | 2017.09.07 |