코딩/C++
scanf_s로 배열 문자열을 입력
김 숨
2021. 11. 26. 21:42
scanf_s() 함수
- 기존 scanf에서 취약한 부분인 'buffer오버플로우' 방지를 위해 보안하고자 만든 것(s는 security)
배열의 범위를 벗어나면 출력을 안한다.
- VS2021 이상 컴파일러에서는 scanf_s사용을 권장한다.
int scanf_s(const char *format[, argument]...);
사용방법
1) scanf_s는 변수를 입력할 때 배열 이름 앞에 &기호를 붙이지 않음
2) 문자열을 입력할 때 입력받을 인수의 크기를 지정해 줘야 함
char str[5];
scanf_s("%s", str, sizeof(str)); //sizeof 혹은 바이트 숫자값 입력
//참고
int a;
scanf_s("%d", a, sizeof(a)); //sizeof 혹은 바이트값(4) 입력
3) 문자열을 두개 이상 입력 받으려면? ( 배열1, 크기, 배열2, 크기 ···)
char str1[10];
char str2[10];
scanf_s("%s %s", str1, sizeof(str1), str2, sizeof(str2));
어떻게 오류를 방지하는지 참고 : https://hh4131.tistory.com/22
[C언어] scanf, scanf_s 함수
오랜만에 예제소스를 만들기 위해 scanf 함수를 사용하였다. 정말 간단한 소스였기때문에 에러가 날 것이라고는 생각지 않았는데...... warning C4996: 'scanf': This function or variable may be unsafe...
hh4131.tistory.com
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
자세한 정보: scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l
docs.microsoft.com