C language puts, fputs, gets, fgets
C language puts / fputs
c언어를 공부하면서 그동안 문자열을 입력받기 위해서 scanf() 함수를 이용했고 출력할 때는 printf()를 이용했었는데요. 이 scanf() 함수는 공백을 처리하지 못하는 단점이 있었습니다. 하지만 여기서 알아볼 입력 함수들은 공백도 처리하면서 문자열을 입력받을 수 있기 때문에 유용한데요. 먼저 문자열을 출력하는 puts와 fputs부터 간단하게 알아보고 입력받는 gets와 fgets 함수를 살펴보겠습니다.
int puts(const char * s);
int fputs(const char * s, FILE * stream);
▲ puts 함수는 표준 스트림인 stdout을 대상으로 출력되지만 fputs 함수는 두 번째 인자를 통해서 출력의 대상을 변경할 수 있습니다. 이 두 함수의 공통점은 첫 번째 인자로 전달되는 주소의 문자열을 출력하는 건 같지만 출력하는 형식에서 조금 차이점이 있는데요. 예제를 통해서 확인해볼게요. 참고로 fputs() 함수의 두 번째 인자인 출력 대상은 stdout으로 지정하고 테스트해보겠습니다.
▲ 둘의 차이점이 바로 확인되죠?? puts 함수는 문자열을 출력하고 자동으로 개행이 되는 반면 fputs 함수는 그렇지 않습니다. 이 녀석을 사용할 때는 개행할 때마다 printf("\n") 함수를 넣어줘야 하는 불편함이 있겠네요.
다음은 공백 포함 문자열을 입력받을 수 있는 gets과 fgets 형식입니다.
gets(char * s);
fgets(char * s , int n, FILE * stream);
■ 이 둘 중 gets 함수는 다소 한계가 있습니다. 이 녀석을 호출할때 다음과 같은 형식으로 호출을 하는데요.
char ch[5];
gets(ch);
▲ 5byte의 메모리 공간을 확보한 후 문자열을 입력받아서 ch에 저장하는데 만약에 5byte 이상의 문자가 입력되면 에러가 발생하게 됩니다. 그렇기 때문에 fgets 함수를 이용하는데요. 두 번째 인자로 sizeof(ch)를 넣어주면 ch의 길이-1만큼만 데이터를 읽어서 저장하게 됩니다. 이때 마지막 자리에는 문자열을 구분하기 위한 Null 문자를 입력하기 위한 자리입니다.
간단한 예제를 만들어서 확인해보고 마무리할게요.
▲ 5byte 공간을 확보하고 문자열을 입력받아서 저장했다가 다시 출력하는 내용인데 프로그램을 실행해서 꽤 길게 문자열을 입력했습니다. 하지만 5-1(Null)의 숫자인 4개만 저장된 걸 확인할 수 있습니다.
이렇게 해서 C 언어에서 공백을 포함한 문자열을 입력받고 출력하는 함수 puts, fputs, gets, fgets에 대해서 알아봤습니다. 수고하셨어요.