서론
C언어에서 gets
함수는 사용자로부터 문자열을 입력받는 함수입니다. 하지만 gets
함수는 문자열의 길이를 체크하지 않고 입력을 받기 때문에 버퍼 오버플로우(buffer overflow)와 같은 보안 취약점이 발생할 수 있습니다. 이러한 문제점으로 인해, gets
함수는 안전하지 않은 함수로 간주되며, 다른 함수들을 사용하기를 권장합니다.
본론
gets 함수의 문제점
gets
함수는 사용자로부터 문자열을 입력받을 때,
1. 고정된 버퍼 사이즈를 가지고 있지 않고, 사용자로부터 입력받은 문자열의 길이에 상관없이 모든 문자를 입력받습니다.
2. 문자열을 저장할 버퍼 크기가 부족한 경우, 문자열 외의 다른 메모리를 덮어씌우게 될 수 있습니다.
이러한 문제점으로 인해 gets
함수는 사용을 권장하지 않으며, 대신 fgets
함수를 사용하는 것이 좋습니다.
fgets 함수의 사용
fgets
함수는 gets
함수와 달리 버퍼의 크기를 인자로 받고, 사용자로부터 입력을 받을 때 버퍼 크기를 초과하는 경우 입력을 중단합니다.
다음은 fgets
함수를 사용하여 문자열을 안전하게 입력받는 예제입니다.
“`c
include
int main() {
char str[20];
printf("문자열을 입력하세요: ");
fgets(str, sizeof(str), stdin);
return 0;
}
“`
위 예제에서 fgets
함수는 str
배열에 최대 sizeof(str)
크기의 문자열을 입력받습니다. 따라서 버퍼 오버플로우와 같은 문제가 발생하지 않습니다.
결론
gets
함수는 문자열 입력을 위해 사용되었으나, 버퍼 오버플로우와 같은 보안 문제가 있어 사용이 권장되지 않습니다. 대신 fgets
함수를 사용하여 안전하게 문자열을 입력받을 수 있습니다. C언어를 사용할 때에는 항상 보안 취약점을 고려하여 코딩해야 하며, 안전한 함수를 사용하는 습관을 들이는 것이 좋습니다.