웹사이트 검색

C 프로그래밍의 fgets() 및 gets()


소개

우리는 모두 scanf() 함수에 익숙합니다. 기본 사용자 입력을 받는 데 적용할 수 있는 주요 기능입니다. scanf()는 정수, 문자, 부동 소수점 등과 같은 입력을 받는 동안 훌륭하게 작동하지만 공백을 포함하는 문자열 입력을 받는 동안 확실히 뒤쳐집니다. 예를 들어 보겠습니다.

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the string: ");
    scanf("%s", string);
    printf("\n %s",string);
    return 0;
}

산출:

위의 예에서 볼 수 있듯이. scanf()는 공백이나 개행을 만나자마자 스캔을 중지합니다. 이것은 실제로 scanf()를 사용하여 문자열 입력을 받는 것을 약간 번거롭게 만듭니다. 이것은 gets()fgets()와 같은 다른 입력 함수를 사용하여 쉽게 피할 수 있습니다.

이 기사에서는 두 기능을 모두 적용하고 나란히 비교하는 방법을 배웁니다.

C의 gets() 함수

gets()는 문자열이나 텍스트 줄을 읽는 데 사용되는 C의 미리 정의된 함수입니다. 그리고 잘 정의된 문자열 변수에 입력을 저장합니다. 함수는 개행 문자를 만나자마자 읽기 세션을 종료합니다.

통사론:

gets( 변수명 );

아래 주어진 코드는 gets() 함수의 사용을 보여줍니다.

#include<stdio.h>
int main()
{
    char string[10];
    printf("Enter the String: ");
    gets(string);
    printf("\n%s",string);
    return 0;
}

산출:

scanf()를 사용하는 동안 출력을 하나와 비교하십시오. 'Hello World'는 이제 단일 문자열로 처리됩니다.

C의 fgets() 함수

표준 C 라이브러리는 또 다른 함수인 fgets() 함수도 제공합니다. 이 함수는 지정된 파일이나 콘솔에서 텍스트 줄이나 문자열을 읽습니다. 그런 다음 해당 문자열 변수에 저장합니다.

gets() 함수와 마찬가지로 fgets도 개행 문자를 만날 때마다 읽기를 종료합니다. 그러나 gets()와 달리 이 함수는 EOF에 도달하거나 문자열 길이가 지정된 제한(n-1)을 초과하는 경우에도 중지됩니다.

통사론,

fgets(문자 *str, 정수 n, 파일 *스트림)

  • str - 문자열이 저장될 변수입니다.
  • n - 읽어야 하는 문자열의 최대 길이입니다.
  • stream - 문자열을 읽을 파일 핸들입니다.

다행히 fgets() 함수를 사용하여 파일이나 표준 입력 스트림에서 텍스트 줄을 읽을 수 있습니다. 방법을 알아보겠습니다.

1. fgets()를 사용하여 주어진 파일에서 읽기

예를 들어,

#include<stdio.h>
int main()
{
    char string[20];
    FILE *fp;
    fp=fopen("file.txt","r");
    fgets(string,20,fp);
    printf("The string is: %s",string);
    fclose(fp);
    return 0;
}
    

'JournalDev fgets() example!' 행을 포함하는 file.txt를 고려하십시오. 이 경우 위 코드의 출력은 다음과 같습니다.

2. fgets()를 사용하여 stdin에서 읽기

#include<stdio.h>
int main()
{
    char string[20];
    printf("Enter the string: ");
    fgets(string,20,stdin);         #input from stdin stream
    printf("\nThe string is: %s",string);
    return 0;
}

산출:

결론

gets()fgets() 두 함수 모두 문자열 입력을 읽는 데 사용할 수 있습니다. 둘 사이의 가장 큰 차이점은 후자는 사용자가 버퍼 크기를 지정할 수 있다는 사실입니다. 따라서 gets() 함수보다 강력하게 권장됩니다.

gets() 함수는 입력이 버퍼보다 큰 경우를 대비할 수 없습니다. 결과적으로 메모리 막힘이 발생할 수 있습니다. fgets() 함수가 빛을 발하며 궁극의 솔루션을 제공하는 부분입니다.

참조

  • /community/tutorials/strings-in-c-programming
  • https://stackoverflow.com/questions/19748307/use-of-fgets-and-gets