관리 메뉴

Life is like a Wolf

[C언어]파일 입출력#2 ( fgets(), fputs() ) 본문

프로그래밍언어/C언어

[C언어]파일 입출력#2 ( fgets(), fputs() )

돌아온 Daos 2010.08.01 23:41

 오늘은 fgets(), fputs()에 대해서 알아보겠습니다.
 fgets()와 fputs()는 파일포인터에 문자열을 읽고 쓰는 함수입니다.
 fgets()함수는  읽을 문자들의 최대 개수를 지정함으로써 gets()의 약점( 입력이 확보한 기억 공간에 맞는지 검사하지 않고, 확보한 기억 공간을 채우고 남는 문자들은 이웃한 메모리로 흘러넘친다)을 해결합니다.
 fgets()는 개행 문자를 읽어 그 문자열에 저장하고, n-1개까지 문자들을 읽거나 개행 문자가 나올때 까지 읽습니다.
개행 문자를 읽고 버리는 gets()와는 다르다.
 fputs()함수는 puts()와는 달리 출력할 때 개행 문자를 덧붙이지 않습니다.
 fgets()가 개행 문자를 유지하고, fputs()는 개행 문자를 덧붙이지 않기 때문에 서로 협력하여 잘 동작합니다.

char
*fgets( char *string, int n, FILE *stream );
int fputs( const char *string, FILE *stream );


< 파일입출력 테스트 Source >


<fputs.txt파일 확인>

3 Comments
  • 프로필사진 2011.05.22 03:51 비밀댓글입니다
  • 프로필사진 돌아온 Daos 2011.05.26 17:27 신고 아..헷갈리게 되어있는 부분이있었네요..ㅎㅎ
    34번째줄에서 사용되는 i는 증가하지 않습니다.
    무슨 말이냐하면.. fgets로 null이 아닐 때 까지 읽어들인 것을 Getnames에 저장을 하는데 어차피 Getnames[0]에 다가 계속 저장이 되기때문입니다..
    i가 증가하는것이 아니고 fgets로 문자열을 꺼내고 자동으로 fp가 다음줄을 가르키기 때문에 그다음에는 다음 문자열을 가져오는겁니다.
    자동으로 i가 증가하는것 처럼 느껴지신거 같네요.
    결국 i값이 증가하지않기때문에 Getnames[0]에 문자열이 계속 저장되면서 출력되는겁니다.
    즉 Getnames[3][10]으로 선언되어있는데..3이 아니고 1로 선언하여 사용하는것과 똑같다는것이지요..ㅎㅎ
    이해가 되셨나요?^^
  • 프로필사진 reservation hotel paris 2012.08.11 23:14 신고 비밀댓글입니다
댓글쓰기 폼