2012-06-21 2 views
2

C 표준 라이브러리 stdio.h을 사용하면 ASCII/텍스트 데이터를 출력하고, "w" 모드를 사용해야하며 이진 데이터를 출력하려면 "wb"을 사용해야합니다. 그러나 왜 그 차이가 있습니까?출력이 비 ASCII 일 때 fopen() 모드 'b'(stdio.h)를 사용하는 이유는 무엇입니까?

두 경우 모두 바이트 (문자) 배열을 출력하는 것입니다. 맞습니까? ASCII 모드로 비 ASCII 바이트를 출력해도 프로그램은 올바른 바이트를 출력합니다.

+8

자동 개행 변환. 바프. –

+1

http://wiki.answers.com/Q/What_is_the_difference_between_binary_file_and_text_file_in_c_language – m0skit0

+2

Windows 메모장의 고대 버전에서 파일이 올바르게 표시되도록하는 것이 아니라면 항상 ""b 옵션을 사용해야합니다. 바이너리 모드와 다른 텍스트 모드는 당신의 인생을 지옥으로 만듭니다. CR이있는 기존 텍스트 파일을 지원해야하는 경우 파서에서 CR을 제거하기 만하면됩니다. 만약 당신이'scanf'를 사용한다면, 공백을 건너 뛰는 과정의 일부로 무시할 것입니다. –

답변

5

대부분 "윈도우"라고하는 운영 체제는 파일을 ASCII 형식으로 읽고 쓰는 것을 보장하지 않습니다. 지도 \ r \ n ~ \ n. 아스키를 읽고 쓸 때 이것은 훌륭하고 투명합니다. 그러나 그것은 이진 데이터의 흐름을 파괴 할 것이다. 기본적으로 윈도우에 'b'플래그를 지정하면, 파일을 정확하게 전달하고 읽고 쓸 수 있습니다.

0

플랫폼에 따라 ASCII로 출력 할 때 (예 : 출력 된 문자가 개행 일 때 네 라인 + 캐리지 리턴 출력) 특정 변환이 있습니다. 이러한 변환은 바이너리 형식을 사용할 때 발생하지 않습니다.