Microsoft Visual Studio 2017 Community버전을 쓰다보면 scanf를 쓰게되면 scanf_s로 쓰라고 권장을 하면서 오류가 난다.
scanf와 scanf_s함수는 표준 입력하는데 있어서 쓰이는 함수이다. 차이점이라면 scanf_s는 scanf의 버퍼 오버플로우등 다양한 보안상의 문제를 보안한 함수이다.
최상위 버전에서는 SDL, Security Development Lifecycle검사가 체크되어있어 비주얼 스튜디오에서는 scanf_s가 없으면 오류가 난다.
scanf, scanf_s의 문법은 거의 동일하다. 단 %s 를 통한 문자열을 받을 때는 입력개수를 인자로 한개를 더 넣어주어야 한다.
일반적인 gcc-compiler상에서 문자열을 받는다면(gcc의 대표적인예시 : Dev-C++, Sublime Text - standard gcc를 올려 사용하는 경우)
1 2 3 4 5 6 7 | #include<stdio.h> int main() { char ex[10]; scanf("%s", ex); } | cs |
1 2 3 4 5 6 7 8 | #include<stdio.h> int main() { char ex[10]; scanf_s("%s", ex, strlen(ex)); return 0; } | cs |
1 2 3 4 5 6 7 8 9 | #include<stdio.h> int main() { char ex[10]; int a, b; scanf_s("%s, %d, %d", ex, strlen(ex),&a,&b); return 0; } | cs |
Microsoft Visual Studio 2017 Community버전을 쓰다보면 scanf를 쓰게되면 scanf_s로 쓰라고 권장을 하면서 오류가 난다.
scanf와 scanf_s함수는 표준 입력하는데 있어서 쓰이는 함수이다. 차이점이라면 scanf_s는 scanf의 버퍼 오버플로우등 다양한 보안상의 문제를 보안한 함수이다.
최상위 버전에서는 SDL, Security Development Lifecycle검사가 체크되어있어 비주얼 스튜디오에서는 scanf_s가 없으면 오류가 난다.
scanf, scanf_s의 문법은 거의 동일하다. 단 %s 를 통한 문자열을 받을 때는 입력개수를 인자로 한개를 더 넣어주어야 한다.
일반적인 gcc-compiler상에서 문자열을 받는다면(gcc의 대표적인예시 : Dev-C++, Sublime Text - standard gcc를 올려 사용하는 경우)
1 2 3 4 5 6 7 | #include<stdio.h> int main() { char ex[10]; scanf("%s", ex); } | cs |
1 2 3 4 5 6 7 8 | #include<stdio.h> int main() { char ex[10]; scanf_s("%s", ex, strlen(ex)); return 0; } | cs |
1 2 3 4 5 6 7 8 9 | #include<stdio.h> int main() { char ex[10]; int a, b; scanf_s("%s, %d, %d", ex, strlen(ex),&a,&b); return 0; } | cs |