[질문] 파일 다루기...
글쓴이: hurryon / 작성시간: 월, 2003/03/24 - 8:52오후
으흠...혹시나 하고 했다가...이거 황당한 경우을 발견했습니다. 아니 발견이라
기 보다는...제 자신의 무지함을 발견했다고 해야 겠죠.
소스는 다음과 같습니다.
#include <stdio.h> int main(int argc, char *argv[]) { FILE *fp; int i; char buf[10]; fp = fopen(argv[1], "r"); memset(buf, 0x00, 10); fgets(buf, 10, fp); printf("%s", buf); memset(buf, 0x00, 10); fgets(buf, 10, fp); printf("%s", buf); return(0); }
결과는...
[hurryon@ns2 tmp]$ cat hurryon.dat
hurryonlove0052chongnux
[hurryon@ns2 tmp]$ gcc -o test test.c
[hurryon@ns2 tmp]$ ./test hurryon.dat
[hurryon@ns2 tmp]$
하지만 소스을 다음과 같이 하면...
#include <stdio.h> int main(int argc, char *argv[]) { FILE *fp; int i; char buf[10]; fp = fopen(argv[1], "r"); memset(buf, 0x00, 10); fgets(buf, 10, fp); printf("%s\n", buf); memset(buf, 0x00, 10); fgets(buf, 10, fp); printf("%s\n", buf); return(0); }
결과는 다음과 같습니다.
[hurryon@ns2 tmp]$ cat hurryon.dat
hurryonlove0052chongnux
[hurryon@ns2 tmp]$ gcc -o test test.c
[hurryon@ns2 tmp]$ ./test hurryon.dat
hurryonlo
ve0052cho
[hurryon@ns2 tmp]$
으흠...왜 이런지요? 에휴...무지함에 눈물이...흐흑...
Forums:
닫으셔야져
fclose 로 닫아야 flush되서 출력되지 않나요?
\n이 붙으면 다음 라인으로 넘어가니 저절로 flush되나...
음냐...마찬가지 네요.
으흠...깜빡했네요...하지만 fclose 을 해도 마찬가지네요.
왜 이러지?
방금 위에 소스 갖다가 컴파일 해보니 저는 잘 되는데요..^^;;
방금 위에 소스 갖다가 컴파일 해보니 저는 잘 되는데요..^^;;
내 컴터가 이상한건가..-_-a
===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.
제가 생각하기엔..
터미널 문제가 아닌가 싶네요...
"hurryonlo"와"ve0052cho" 단어가
붙어서.. 한줄에 출력된 후에..
쉘 프롬프트 "[hurryon@ns2 tmp]$"가 그 화면을 덮어버리는거죠.. -0-;
printf 문에서.. "\n"를 넣어 줬을때는 한줄을 아래로 내려서 출력하기 때문에
결과가 제대로 출력되는거구요..
두번째 printf 문에서 "\n"을 제거하면 "hurryonlo" 만 출력되지 않을까 싶습니다..
앗...정답이십니다...
으흠...이런 경우는 정말 처음입니다...왜 내게 이런 시험에 들게 하시는지?
으흠...사용하고 있는 클라이언트는 SSH Secure Shell 입니다. 그리고
터미날은 xterm 으로 맞추어 놓았는데...으흠...
그리고 한가지 더 궁금한것이 있습니다. 제가 버퍼을 10개로 잡아 놓았고
fgets() 에서도 10개을 읽어 들였는데...9개의 문자밖에 읽혀지지
않는군요.
그렇다면 나머지 하나에는 '\0'이 자동으로 들어가 있는것 인지요?
man 페이지에 의하면..
char *fgets(char *s, int size, FILE *stream);
fgets()는 size개 이하의 문자를 stream으로 부터 읽어서, s가 가리키는 버퍼에 저장하고, 버퍼의 마지막에 "\0"를 추가한다고 합니다.
댓글 달기