본문 바로가기
프로그래밍언어/C 언어

[C 언어] fgets 함수를 사용한 문자열 입력

by khsnote22 2022. 12. 9.

앞서 언급했듯이 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 함수와 거의 같으나 개행 문자의 처리 방식이 다릅니다.