C 언어는 프로그래밍 언어 중 가장 널리 사용되는 언어 중 하나입니다. 이 언어는 많은 기능과 라이브러리를 제공하여 개발자들이 다양한 응용 프로그램을 작성할 수 있게 합니다. C 언어에서는 사용자로부터 문자열을 입력받는 데에 두 가지 주요 함수를 사용합니다. gets와 fgets 함수는 문자열을 입력받기 위해 사용되며, 각각의 함수는 특정한 용도와 특징을 가지고 있습니다. gets와 fgets 함수의 사용 방법과 예제에 대해 알아보겠습니다.
gets 함수
gets 함수는 사용자로부터 문자열을 입력받기 위해 사용됩니다. 사용자가 엔터 키를 누를 때까지 입력된 모든 문자들은 문자 배열에 저장됩니다.
#include <stdio.h>
int main() {
char name[50];
printf("이름을 입력하세요: ");
gets(name);
printf("안녕하세요, %s님!\n", name);
return 0;
}
위의 예제에서 gets 함수를 사용하여 사용자로부터 이름을 입력받습니다. 사용자는 이름을 입력하고 엔터 키를 누를 때까지 기다립니다. 그리고 입력된 이름은 문자열 배열인 name에 저장됩니다. 마지막으로 입력된 이름을 출력합니다. 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
이름을 입력하세요: John
안녕하세요, John님!
하지만 gets 함수는 버퍼 오버플로우와 관련된 보안 취약점을 가지고 있으므로 사용을 권장하지 않습니다. 대신 fgets 함수를 사용하는 것이 안전합니다.
fgets 함수
fgets 함수는 사용자로부터 문자열을 입력받기 위해 사용됩니다. fgets 함수는 세 개의 인자를 받습니다. 첫 번째 인자는 입력을 받을 문자열을 저장할 버퍼입니다. 두 번째 인자는 버퍼의 크기입니다. 세 번째 인자는 입력을 받을 파일의 포인터로 일반적으로 stdin을 사용합니다.
#include <stdio.h>
int main() {
char name[50];
printf("이름을 입력하세요: ");
fgets(name, sizeof(name), stdin);
printf("안녕하세요, %s님!\n", name);
return 0;
}
위의 예제에서 fgets 함수를 사용하여 사용자로부터 이름을 입력받습니다. name이라는 문자열 배열에 최대 49개의 문자까지 입력을 받을 수 있습니다. sizeof(name)을 사용하여 버퍼의 크기를 지정합니다. 마지막으로 입력된 이름을 출력합니다. 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
이름을 입력하세요: John
안녕하세요, John
님!
fgets 함수는 버퍼 오버플로우를 방지하기 위해 버퍼의 크기를 명시적으로 지정하고, 입력의 끝에 있는 개행 문자(\n)도 함께 받아들입니다.
결론
C 언어에서 gets와 fgets 함수는 사용자로부터 문자열을 입력받는 데 사용되는 중요한 함수입니다. gets 함수는 버퍼 오버플로우와 관련된 보안 취약점을 가지고 있으므로 사용을 지양해야 합니다. 대신 fgets 함수를 사용하여 안전하게 문자열을 입력받을 수 있습니다. 이러한 함수들은 프로그래밍에서 사용자 입력을 다룰 때 매우 유용하며, 다양한 응용 프로그램을 개발할 때 사용될 수 있습니다.
'IT > c언어' 카테고리의 다른 글
C 언어 strlen 함수 (0) | 2023.07.17 |
---|---|
C 언어 fflush 함수 (0) | 2023.07.17 |
C 언어 puts fputs (0) | 2023.07.17 |
C 언어 putchar, fputc 함수 (0) | 2023.07.16 |
C 언어 2차원 배열 포인터 (0) | 2023.07.15 |
댓글