1. gets 함수를 사용한 문자열 입력
함수 원형
char *gets(char *str)
gets 함수는 버퍼에서 개행 문자를 가져오지만 배열에는 널 문자로 바꿔 저장합니다. gets 함수도 scanf 함수처럼 입력한 문자열을 포인터 연산을 통해 배열에 저장합니다. 그래서 할당된 배열의 크기보다 큰 문자열을 입력하면 배열에 할당된 메모리 공간을 벗어나 저장하므로 주의가 필요합니다.
scanf 함수는 white space인 스페이스, 탭, 엔터 키를 눌러도 계속 입력을 기다립니다. scanf에서는 이들을 문자열을 구분하는 용도로만 사용하고 실제 데이터로는 사용하지 않기 때문입니다. 그러나 gets 함수는 문자열의 일부로 입력받으므로 문자열 입력 없이 처음부터 enter를 눌러도 바로 입력을 끝냅니다. 이때 앞에서 설명했던 것처럼 개행 문자를 널 문자로 바꿔 저장하며 마무리합니다.
2. fgets 함수
gets 함수와 fgets 함수와의 가장 큰 차이점은 마지막에 오는 개행문자의 처리입니다. gets 함수는 마지막 개행 문자를 널 문자로 변경함과 다르게 fgets 함수는 마지막 개행 문자까지 문자열로 포함시켜 문자열을 완성합니다.
그래서 string.h 의 strlen 함수를 사용해 문자열의 길이를 구한 다음, 개행 문자의 위치를 널 문자로 변경해줘야 깔끔하게 출력됩니다.
3. 문자열을 출력하는 puts, fputs 함수
puts 함수는 출력 이후 마지막에 사용자가 원하지 않아도 개행을 시킨다. 이에 반해 fputs함수는 stdout을 인수로 받으며 따로 개행시켜주지 않는다.
4. gets 함수 구현
무조건 처음에 getchar() 함수를 호출해 입력받은 값을 ch에 넣고 그 값이 개행인지를 묻는다. 반환 값은 없고, 마지막에 개행 문자를 널 문자로 변경해준다.
'C언어' 카테고리의 다른 글
[혼공C] string.h 헤더파일 내장 함수 구현(strlen, strncpy, strncat, strcpy) (0) | 2021.10.09 |
---|---|
[혼공C] 12-2 대입 연산자를 사용한다면 배열 선언과 동시에 문자열 초기화는 국룰 (0) | 2021.10.08 |
[혼공C] 12-1 scanf 함수를 사용한 문자열 입력 (0) | 2021.10.07 |
[혼공C] 12-1 문자열의 주소로 접근하여 문자열을 변경하는 것은 가능한가? (0) | 2021.10.07 |
[혼공C] 11-2 scanf 함수의 int 자료형 변수 입력과 stdio.h의 EOF (0) | 2021.10.07 |