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