'0x0A'에 해당되는 글 1건
- 2008/06/25
요놈의 DOS (Windows) 기반에서 프로그래밍을 할때는 한가지 고려해야할 상황이있다.
Binary mode가 아닐경우에는 Carriage return (0x0D) 값이 Line feed (0x0A)앞에 꼭 따라온다는 것이다.
Unix 기반에서는 Line feed만으로 가능한데 말이다.
회사 동료가 요놈때문에 하루를 고생했는 모양이다. 어제 월차라서 회사에 없었는데..
아침에 출근을 하자마자 질문.. 원인은 carriage return
Quiz 다음 코드가 생성하는 파일은 같은 Size일까?
1 // 0A.cpp : Defines the entry point for the console application.
2 //
3
4 #include "stdafx.h"
5 #include <stdio.h>
6
7
8 int main(int argc, char* argv[])
9 {
10
11 FILE *fp;
12 FILE *fp_binary;
13 char ch;
14
15 fp = fopen("test.bin", "w");
16 fp_binary = fopen("test_b.bin", "wb");
17
18 ch = 0x0A;
19
20 fprintf(fp, "%c", ch);
21 fprintf(fp_binary, "%c", ch);
22
23 fclose(fp);
24 fclose(fp_binary);
25
26 return 0;
27 }
투덜이 님의 정답 리플 :
답 : 상황따라 다르다 ^^
1. 15번째 줄처럼 바이너리 모드인지 텍스트 모드인지를 지정하지 않고 열 때는 전역변수인 _fmode의 설정값에 따라 오픈 모드가 결정됩니다. Visual C++인 경우에는 _O_TEXT가 기본 모드인데요, 혹 다른 라이브러리를 사용하시면 달라질 수 있습니다.
2. 개행문자를 나타내는 시퀀스가 도스 계열에서는 CRLF, 유닉스 계열에서는 LF, 예전 맥오스 계열에서는 CR이라고 합니다. 그래서 추측 해보자면, 도스 계열에서는 다른 파일이 만들어지고, 유닉스 계열에서는 두 개가 같고, 맥오에스 옛날버전에서는 크기는 같은데 내용은 다를거 같네요. 그냥 추측입니당 ^^