반응형
[scanf와 scanf_s의 차이]
기존에 사용하던 scanf함수는 지정된 버퍼의 크기보다 더 많은 양의 문자를 넣을수 있기 때문에 버퍼오버플로우에 대해서 많이 취약했다.
이러한 부분을 보완하고자 만든 함수가 scanf_s이다. _ 즉, 보안을 위해서 보완한 함수이다.
scanf와 scanf_s의 사용법은 거의 똑같지만, 문자와, 문자열을 입력받을 경우에 인자값으로 하나를 더 입력해 줘야한다.
#include<stdio.h>
int main() {
char arr[20];
scanf("%s",arr);
}
- scanf 함수는 arr 크기가 20일때 arr에 20이상의 문자를 넣을수 있다는 취약점(버퍼오버플로우)이 있었다.
#include<stdio.h>
int main() {
char arr[20];
scanf_s("%s",arr,sizeof(arr));
}
- scanf_s 함수는 문자열의 크기를 인자값으로 넘겨주어 arr 크기가 20일때 arr에 19개의 문자열을 입력할 수 있게 되었다. (1개는 \0을 넣을 공간)
- 그리고 버퍼의 크기를 주지 않으면, 출력이 되지 않는다.
#include<stdio.h>
int main() {
char arr[20];
char str[20];
scanf_s("%s %s",arr,sizeof(arr),str,sizeof(str));
}
- 만약 문자열을 두개 이상 입력 받고싶으면 위의 코드처럼 배열_1 이름, 배열_1 크기, 배열_2 이름, 배열_2 크기 순으로 넣어주면 된다.
반응형
'Language_ > C 언어' 카테고리의 다른 글
[c언어] memset 함수에 대하여 (0) | 2018.11.24 |
---|---|
[c언어] ctype.h 함수 목록 (0) | 2018.10.31 |
[c언어] Visual Studio 콘솔창 유지 (0) | 2018.10.06 |
[c언어] Visual Studio 2017 설치하기 (0) | 2018.10.05 |
[c언어] c언어란? (0) | 2018.10.05 |
댓글