scanf_s를 자주 사용하는데 심사문제를 풀때 scanf_s 때문에 인수를 제대로 받아오지 못하는 경우가 있고 그렇지 않은 경우가 있습니다. 제가 기억하기로는 scanf_s는 보안을 강화한 입력함수로 알고 있는데 어째서 scanf_s 사용시 문자열을 이용한 문제 쪽에서 오류가 발생하는 것인지 알고 싶습니다. 제가 오류가 발생한 부분은 지뢰찾기와 44.7문제였습니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[1001];
int stak = 0;
scanf("%[^\n]s", str);
char *ptr = strchr(str, ' ');
while (ptr != NULL) {
stak++;
ptr = strchr(ptr + 1, ' ');
}
printf("%d", stak);
return 0;
}
여기서 scanf_s로 바꿀시 버그가 발생하여 stak이 싸이지 않음.
scanf_s는 입력값을 받을때 옆에 메모리 크기도 써주셔야 합니다.
scanf_s("%[^\n]s", str, 문자열 메모리의 크기 )
scanf_s는 비표준 함수입니다.
Visual C++을 제외한 다른 컴파일러나 플랫폼에서는 사용할 수 없습니다.
리눅스, macOS 등에서는 해당 함수를 사용할 수 없고, gcc, clang 컴파일러에서도 사용할 수 없습니다.
C 언어는 시스템 프로그래밍 언어이고, 플랫폼 구분 없이 동작해야 하는 경우가 많습니다. 또한, 윈도보단 리눅스 플랫폼에서 사용하는 경우가 더 많습니다. 비표준 함수이니 표준을 사용하는 것이 좋습니다.