[질문]fgets 이상하네요 누가 설명좀 부탁드립니다.
글쓴이: boardholic / 작성시간: 월, 2005/04/11 - 9:46오후
제가 파일에서 한줄씩 읽어들이려고 하는데
예를들어 test.txt란 파일에
hello kldp bbs
i love you
이런 문장이 있다고 치면
1.fgets(buf,16,fp)
printf("%s",buf)
2.fgets(buf,1,fp)
printf("%s",buf)
이런식으로 출력해보니 (참고로 ftell로 포인터 위치를 확인)
첫번째 포인터가 16이고 두번째 포인터도 16이었습니다.
예상대로라면 두번째가 17이되고 i문자가 찍혀야 하는데
도저히 감이 안잡힙니다.
또한 첫번재에서 갯수를 16이 아닌 16이상을 넣어도 포인터 위치
는 16이었습니다. 결국 '\0'과 '\n'문자가 포함된다고 생각했는데
다음 읽어들일때 갯술를 1을 주니까 그대로 16이었는데 2를 주면
물론 i가 찍혔습니다. 이해가 않가네요.
전문가님들 이해하기 쉽게 fgets() 함수에 대해 설명 부탁드립니다.
Forums:
stdio 의 f계열 함수가... 따로 버퍼링을 하기 때문에 생기는 현상
stdio 의 f계열 함수가... 따로 버퍼링을 하기 때문에 생기는 현상이 아닐까요 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
전문가는 아니지만...메뉴얼 페이지에는[quote]The fg
전문가는 아니지만...
메뉴얼 페이지에는
라고 나와있네요. "두번째 인자 - 1" 만큼만 읽어드린다는 것 같습니다.
따라서 fgets(buf,1,fp) 는 의미가 없어보입니다.
1바이트는 널 문자 '\0'을 위해 남겨놓는 것입니다.
1바이트는 널 문자 '\0'을 위해 남겨놓는 것입니다.
char *fgets(char *s, int n, FILE *stream
char *fgets(char *s, int n, FILE *stream); 는 스트림 stream 에서
n-1 바이트를 읽어 오는 함수. n-1 바이트 읽어 오기전에 newline을 만나거나
파일 끝을 만난 경우 거기 까지만 읽어 옴. newline을 만난경우 newline까지 포함
됨. 문자열을 다 읽은 경우 끝은 '\0' 으로 채워짐.
보통 fgets 함수는 텍스트 파일의 내용을 한줄씩 읽을 경우에 사용하는데
s는 가장 큰 한줄을 커버할 만큼의 충분한 공간을 할당한뒤 사용.
fgets 를 사용할시 feof 함수도 함께 사용하세요.
대략 다음의 유형으로 많이 쓰입니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
[quote="IsExist"]fgets 를 사용할시 feof 함수도 함
feof()를 이렇게 쓰는 것은 잘못입니다.
C Programming FAQ의 Q12.2를 참고하십시오.
FAQ를 참조하면 아래와 같이 수정하는게 좋겠군요[code:1]
FAQ를 참조하면 아래와 같이 수정하는게 좋겠군요
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
댓글 달기