프로그래밍/C

scanf, gets, fgets 차이

msh1307 2022. 4. 1. 00:42

scanf()는 문자열 입력시, 엔터전까지 문자열을 가져온다.
공백이 나오면 공백 이전까지 저장되고 마지막에 \0가 붙는다. 공백을 입력받기 어렵다보니 잘 안쓴다.
abc를 입력했으니 실질적으로는 abc\0 이런식으로 저장된다.

gets()는 \n까지 가져오고 \n을 \0으로 바꾼다. 결론적으로 abc\0가 저장된다.

fgets()는 \n까지 가져오고 뒤에 \0를 덧붙여서 저장해준다. abc\n\0으로 저장된다.

C는 입출력을 버퍼를 통해서 한다. 키보드로 입력을 할때 문자열이 버퍼에 들어간다.
그리고 함수들이 그 버퍼에서 가져오게 된다.
scanf같은 함수가 문자들을 가지고 올때, \n을 버퍼에 남기고 가져가기 때문에, 다음에 문자열 입력을 받을 때 어려움이 생길 수 있다. 또한 우리가 일반적으로 입력을 전달할 때, 키보드를 통해서 전달하기 때문에 대부분 뒤에 개행 문자가 붙는 경우가 많다. 하지만 백준 서버같은 경우에는 그냥 입력만 전달하기도 한기 때문에 뒤에 개행문자가 없을 수 있다.

 

'프로그래밍 > C' 카테고리의 다른 글

size_t, pid_t,ssize_t...  (0) 2022.05.03
open, read 시스템콜을 이용한 파일 입출력  (0) 2022.05.03
EOF(End Of File)  (0) 2022.03.31
함수 호출 방식  (0) 2022.03.29
C 배열 접근  (0) 2022.03.25