영벨롭 개발 일지

[C언어]문자열 입력 함수: scanf(), gets(), fgets() 본문

Programming Language/C & C++

[C언어]문자열 입력 함수: scanf(), gets(), fgets()

영벨롭 2022. 2. 15. 17:40

 c언어로 문자열을 입력받을 때 사용할 수 있는 함수는 scanf(), gets(), fgets()가 있습니다. 

 

 세 함수의 헤더파일은 모두 stdio.h입니다. 

 

 각 함수의 예시를 돕기 위해 문자열 변수의 이름을 임의로 str이라고 칭하겠습니다. 

 

  • scanf("%s", str)

 

 먼저 scanf() 함수를 보겠습니다. 

 scanf()함수로 문자열을 입력할 시, 공백(스페이스바 또는 엔터키)단위로 문자열을 입력받습니다. 

 즉, 공백을 포함하지 않는 문자열을 입력할 수 있습니다. 

 

 예를 들어 hello world를 입력하여도 hello만 str에 입력됩니다.

 다음은 예제 코드입니다. 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {
	char str[128];

	scanf("%s", str);

	printf("%s", str);

	return 0;
}

입력: hello world

출력: hello

 

 

  • gets(str, sizeof(str))

 

 다음으로 살펴 볼 함수는 gets() 함수입니다. 

 gets() 함수는 scanf() 함수와 달리 문자열을 공백 단위로 끊지 않고 줄바꿈이 일어날 시 문자열 끝에 \0이 붙여집니다.

 즉, 공백을 포함한 문자열을 입력할 수 있습니다. 

 

 단, gets()는 크기 제한이 없는 함수이기 때문에 에러가 발생할 가능성이 있습니다.(두 번째 parameter인 문자열 크기 생략 가능)

 

 다음은 예제 코드입니다. 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {
	char str[128];

	gets(str, sizeof(str));

	printf("%s", str);

	return 0;
}

입력: hello world

출력: hello world

 

 

 

  • fgets(str, sizeof(str), stdin)

 

 fgets() 함수는 scanf() 함수와 마찬가지로 공백을 포함한 문자열을 입력받을 수 있습니다. 

 fgets() 로 문자열을 입력받을 시 총 3개의 parameter가 필요합니다. 

 

 첫 번째 parameter(str)는 문자열에 대한 포인터를 받고,

 두 번째 parameter(sizeof(str))는 문자열의 최대 크기를 받고,

 세 번째 parameter(stdin)은 문자열을 입력 받을 stream을 받습니다. 

 

 stdin은 표준입력장치(키보드)에서 입력받겠다는 것을 의미합니다. 

 

 fgets() 함수를 사용할 때 주의해야할 점은 줄바꿈이 발생할 때 줄바꿈 문자(\n)도 문자열에 포함되기 때문에 문자열을 입력한 후, 문자열의 마지막 문자를 '\0'으로 바꿔줍니다. 

 

 다음은 예제 코드입니다. 

 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(void) {
	char str[128];

	fgets(str, sizeof(str), stdin);

	printf("%s\n", str);
	printf("%d\n", strlen(str));

	str[strlen(str) - 1] = '\0';  //줄바꿈 문자 제거

	printf("%s\n", str);
	printf("%d", strlen(str));

	return 0;
}

 

입력: hello world

출력: hello world

        

        12

        hello world

        11

 

반응형