보통 scanf()함수를 사용하여 입력값을 받습니다.
하지만, 입력값의 제한이 없어서 지정된 크기보다 더 많은 양을 입력받는 버퍼 오버플로(buffer overflow)라는 메모리가 문제가 발생할 수 있습니다.
visual studio에서는 이를 보완하고자 새로 만든 명령어가 csanf_s()함수 입니다.
함수가 입력값의 크기를 지정한다는 것 외에 다른점은 없습니다.
다만, 환경의 따라 사용할때 여러가지 에러 문구를 확인 할 수 있습니다.
우선 예시 코드를 보자면
#include <stdio.h>
int main(void) {
char str[256];
scanf_s("%s", str, sizeof(str)); // 여기서 C6328 에러가 발생합니다.
printf("%s\n", str);
return 0;
}
위의 표시된 C6328 는 scanf_s()함수 내에 sizeof()함수에서 연산자로 알아낸 변수 크기에 해당하는 값의 형태(unsigned_int64)가 기대한 것(unsigned int)과 다르다는 뜻입니다.
경고 메세지가 나와도 동작에는 아무런 문제가 없지만, 경고 메세지를 없애고 싶다면 2가지 방법이 있습니다.
예시 코드
#include <stdio.h>
int main(void) {
char str[256];
scanf_s("%s", str, (unsigned int) sizeof(str));
printf("%s\n", str);
return 0;
}
#include <stdio.h>
int main(void) {
char str[256];
scanf_s("%s", str, 256);
printf("%s\n", str);
return 0;
}
s 계열 함수들을 쓰라는 경고를 너무 곧이곧대로 듣지 않는 게 좋습니다. scanf() 함수에 문제가 있는 건 사실이지만 그건 %s와 %c를 쓸 때만 그렇습니다.
[출처 : https://www.clien.net/service/board/kin/5592554]