fwrite 와 fprint 의 차이점은?

위의 질문은 친구가 넥슨에 면접을 보러 갔을때 나온 질문이었다고 한다.

술자리에서 잠시 나온 이야기였지만, 흥미가 생겨서 지금 찾아보니 잘 정리된 글이 있다.

fwrite() & fprintf() -- binary or text??

우선, 저수준함수인 fwrite 를 오버라이딩해서 파라미터에 따른 서식에 맞게 보다 편리하게 출력할 수 있도록 만든 것이 fprintf 이다.

위의 링크 글에 설명되었듯이, fwrite 는 버퍼에 있는 내용을 그대로 다 출력한다. 반면에 fprintf 는 표준출력 (Standard output stream) 모드로 동작하여 일반적인 문자열 버퍼 출력 방식을 따르게 된다. 즉 '/0' 과 같은 문자열 종료 캐릭터를 만나면 출력을 종료한다.

아래 예제를 보면 명확하다.



fprintf 를 사용하여 출력하는 경우 HELLO 까지만 찍고, 문자열 종료 널문자 '\0' 을 만났기 떄문에 출력을 종료한다.
반면에 fwrite 는 '\0' 와 상관없이 버퍼 전체의 내용을 그대로 출력해서 HELLO\0WORLD 를 모두 출력한다. ( 텍스트 파일에서는 HELLO WORLD 로 보임 )

결국 printf 서식에 맞게 문자열 출력방식으로 출력하고 싶으면 fprintf 를 쓰고, 버퍼에 있는 모든 내용 혹은 버퍼내의 특정 범위의 내용을 그대로 출력하고자 할 때는 fwrite 를 쓰면 된다.  

댓글을 달아주세요!
  1. BlogIcon blueecho 2009.02.11 23:32 신고  댓글주소  수정/삭제  댓글쓰기

    지난번에 테스트용 프로그램짜다가 대략 아무거나 맞춰서 넣었는데 말야.. 설명 땡큐~ ^^
    쩝.. HDL도 힘들어 죽겠는데 C까지 말성이다.. ㅠㅠ
    프로그램은 역시 왕도가 없는 것인가?

  2. BlogIcon hyperdash 2009.02.12 23:55 신고  댓글주소  수정/삭제  댓글쓰기

    그 외에도 성능에 관련된 다른 부분이 있어서 구별해서 쓴다고 하던데...

    것도 함 찾아봐봐~~ ㅋㅋㅋ 떠넘기기..

  3. BlogIcon shinlucky 2009.02.13 09:15 신고  댓글주소  수정/삭제  댓글쓰기

    오호, 잘보았습니다

  4. 학생 2009.07.31 17:43 신고  댓글주소  수정/삭제  댓글쓰기

    파일공부하다가 잠깐 들렀습니다. 좀 퍼가도 될까요?

이름 암호 홈페이지