반응형
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 를 쓰면 된다.
'IT Story > Programming Language' 카테고리의 다른 글
Visual Studio 에서 재미있는 delete 현상 (4) | 2009.03.25 |
---|---|
디버그 사례 - Visual Studio 6.0 에서 close() 함수 사용시 (2) | 2009.03.18 |
goto Statement Consider Harmful (0) | 2008.12.01 |
비트 이동 연산자 ( << , >> ) 의 결과 (0) | 2008.10.24 |
C++ 과 C# 의 차이... (4) | 2008.07.13 |