달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

fgets() 사용 시 유의점


fgets() 이용할 때 new line('\n')에서 끊어지기는 하나
new line까지 저장되고 Null('\0')이 삽입된다.
따라서 new line이 저장된 부분에 Null을 저장하여 지우는 것이 필요하다.
하지만 만약 버퍼의 크기를 넘어갈 경우
항상 버퍼 크기 -1 크기만큼만 저장되고 마지막에 Null이 삽입된다.
따라서 버퍼 크기 -1 크기만큼 문자열을 입력하고 엔터를 입력하면
new line은 저장되지 않고 마지막에 Null이 삽입되어
이 때는 new line을 없애기 위해 Null을 추가로 삽입하면 안 된다.


그래서 다음과 같이 마지막에 new line이 있는지 여부를 판단하도록 했다.


#define BUFFERSIZE 10
char buf[BUFFERSIZE];
fgets(buf, BUFFERSIZE, stdin);
stringLength = strlen(buf);
if ( buf[stringLength-1] == '\n')
  buf[--stringLength] = NULL;


코드에서 10 byte buf에 대해서
"delicious" 9자를 입력하면 new line 없이 Null이 들어가고
"deliciou" 8자를 입력하면 new line을 Null로서 덮어 없앤다.
물론 9자를 넘어가는 문자열은 모두 저장되지 않고 사라진다.
참고적으로 아무 것도 입력하지 않고 엔터를 입력해도 new line은 저장되고
위의 코드에서는 Null로 덮어 지우게된다.

fgets()에 대한 기본 설명은 아래 링크를 참조하자.

http://www.cplusplus.com/ref/cstdio/fgets.html

Posted by neodelicious
|