앞서 언급했듯이 scanf 함수와 gets 함수는 입력되는 문자열의 크기가 배열 크기를 넘어설 위험성이 있습니다. 이렇게 문자열의 크기가 배열보다 커지면 할당되지 않은 메모리 공간을 침범하여 실행중인 프로그램에 에러가 발생할 수 있습니다. 안전하게 문자열을 입력하려면 배열 크기를 확인하는 fgets 함수를 사용하는 것이 좋습니다. fgets 함수는 최대 배열의 크기까지만 문자열을 입력합니다.
// fgets 함수의 문자열 입력 방법
#include <stdio.h>
// 나중에 입력할 공간입니다.
int main(void)
{
char str[80];
printf("공백이 포함된 문자열 입력 : ");
fgets(str, sizeof(str), stdin); // 문자열 입력
// 나중에 입력할 공간입니다.
printf("입력된 문자열은 %s입니다\n", str); // 문자열 출력
return 0;
}
fgets 함수는 문자열을 저장할 배열명 외에 배열의 크기와 표준 입력 버퍼를 뜻하는 stdin을 함께 사용합니다. 입력한 문자열의 끝에는 항상 널 문자를 붙이므로 최대로 '배열의 크기 -1개'의 문자만을 저장합니다. stdin은 데이터를 입력할 때 키보드와 연견될 표준 입력 버퍼를 사용하라는 뜻입니다. scanf와 gets 함수는 기본적으로 표준 입력을 사용하지만 fgets 함수는 입력 버퍼를 선택할 수 있는 함수이므로 키보드로 입력할 때는 항상 stdin을 넣어야 합니다.
fgets 함수 가 문자열을 입력하는 방식은 gets 함수와 거의 같으나 개행 문자의 처리 방식이 다릅니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[C 언어] 문자열을 출력하는 puts와 fputs 함수 (0) | 2022.12.10 |
---|---|
[C 언어] 표준 입력 함수의 버퍼 공유 문제 (0) | 2022.12.10 |
[C 언어] get 함수를 사용한 문자열 입력 (1) | 2022.12.09 |
[C 언어] scanf 함수를 사용한 문자열 입력 (0) | 2022.12.09 |
[C 언어] char 포인터로 문자열 사용 (0) | 2022.12.09 |