조금 전까지 살펴본 scanf 함수는 중간에 공백이 포함된 문자열을 한 번에 입력할 수 없습니다. 하지만 공백을 넣어야 할 때도 있겠죠? 그럴 때는 gets 함수를 사용합니다. gets 함수는 중간의 공백이나 탭 문자를 포함하여 문자열 한 줄을 입력합니다.
#include <stdio.h>
int main(void)
{
char str[80];
printf("공배깅 포함된 문자열 입력 : ");
gets(str); // 배열명으로 주고 함수 호출
printf("입력한 문자열은 %s입니다.", str);
return 0;
}
scanf 함수 때와 동일하게 apple jam을 입력해보았습니다. gets 함수는 키보드로 Enter를 누를 때까지 입력한 한 줄을 char 배열에 저장합니다. 버퍼를 사용하므로 키보드로 입력한 데이터는 일단 버퍼에 저장된 후에 gets 함수가 가져옵니다. 중간에 있는 공백이나 탭 문자도 모두 가져오므로 한 문장을 한 번에 가져올 수 있습니다. 이때 끝에 있는 개행 문자를 처리하는 방법에 주목해야 합니다.
중요1 - 버퍼에서 개행 문자를 가져오지만 배열에는 널 문자로 바꿔 저장합니다.
결국 gets 함수도 scanf 함수와 마찬가지고 입력한 문자열을 포인터 연산으로 배열에 저장합니다.
따라서 배열의 크기보다 큰 문자열을 입력하면 배열에 할당된 메모리 공간을 벗어나 저장하므로 주의해야 합니다.
중요2 - gets 함수는 Enter만 눌러도 입력을 끝냅니다.
scanf 함수는 문자열을 입력할 때 문자를 입력하기 전에 Space Bar, Tab, Enter를 입력해도 계속 입력을 기다립니다. 이들 키를 누를 때 입력되는 공백 문자, 탭 문자, 개행 문자는 문자열을 구분하는 용도로 쓰고 실제 데이터로 입력하지는 않기 때문입니다. 그러나 gets 함수는 문자열의 일부로 입력하므로 문자열 입력 없이 바로 Enter만 눌러도 입력을 끝냅니다. 이때 배열의 첫 번째 요소에는 개행 문자 대신 널 문자를 저장합니다.
'프로그래밍언어 > C 언어' 카테고리의 다른 글
[C 언어] 표준 입력 함수의 버퍼 공유 문제 (0) | 2022.12.10 |
---|---|
[C 언어] fgets 함수를 사용한 문자열 입력 (0) | 2022.12.09 |
[C 언어] scanf 함수를 사용한 문자열 입력 (0) | 2022.12.09 |
[C 언어] char 포인터로 문자열 사용 (0) | 2022.12.09 |
[C 언어] 문자열 상수 구현 방법 (0) | 2022.12.09 |