표준 입출력 라이브러리
컴퓨터의 주기억 장치인 램은 전원이 켜져 있을 때만 데이터를 유지할 수 있다.
하지만 컴퓨터를 365일 켜 놓을 순 없기 때문에 보조기억 장치(디스크 ,SSD, HDD)가 필요하다.
하지만 보조기억 장치가 너무 다양하기 때문에 프로그래머가 일일이 보조기억 장치의 특성을 파악하는게 힘들다.
파일 입출력 라이브러리도 운영체제에 따라 조금씩 다르다. 운영체제별로 제공하는 입출력 함수는 이름뿐만 아니라 사용법도 다르다.
윈도우 환경에서 파일 입축력 프로그래밍을 하다가 리눅스 환경에서 작업하게 되면 파일 입출력을 다시 공부해야 된다.(그 만큼 다르다)
이런 문제를 해결하기 위해 C언어는 표준 입출력 라이브러리를 제공한다.
표준 입출력 라이브러리는 데이터의 형식에 따라 다른 함수를 제공한다.
바이너리 속성과 문자열 속성
char temp[8] = {'a', 'b', 'c', 0, };
// 마지막 쉼표 이후의 값은 모두 NULL 문자를 의미하는 아스키 값 0으로 초기화함
두 속성의 차이점을 살펴보자.
- 변수에 저장된 데이터의 크기를 구할 때 차이점이 존재한다.
int data_size = sizeof(temp);
// 변수의 크기를 구한다. data_size에는 값 8이 저장된다.
int data_size = strlen(temp);
// 문자열 길이를 구한다. data_size에는 값 3이 저장된다.
- 변수에 저장된 값을 다른 변수에 복사할 때 차이점이 존재한다.
바이너리 속성과 문자열 속성은 temp 변수에 저장된 데이터를 다른 변수에 복사할 때도 서로 다른 함수를 사용한다.
바이너리 모드는 변수에 들어 있는 값을 그대로 복사하는 개념을 사용해야 되기 때문에 temp 변수의 값을 dest 변수로 복사하려면 memcpy 함수를 사용한다.
<바이너리>
char temp[8] = {'a', 'b', 'c', 0,};
char dest[8];
memcpy(dest, temp, sizeof(temp));
//temp에서 dest로 8바이트 크기만큼 메모리를 복사한다.
<문자열>
char temp = {'a', 'b', 'c', 0,};
char dest[8];
strcpy(dest, temp);
// temp에서 dest로 4바이트 크기(NULL 문자 0까지 포함)만큼 복사한다.
memcpy와 strcpy 함수를 비교해 보면 strcpy가 더 간단하고 메모리를 복사하는 양도 적다.
하지만 memcpy는 특별한 체크나 데이터 가공 없이 메모리를 그대로 복사하는 함수다.
-strcpy는 내부적으로 문자를 하나 복사할 때마다 문자열이 끝이 났는지 제대로 된 문자인지를 계속 체크하면서 복사하는 함수다.
바이너리 파일과 텍스트 파일
바이너리 속성 개념이 적용된 파일이 바이너리(Binary) 파일
ex: 이미지파일, 음악파일, 동영상파일. 실행파일
문자열 속성이 적용된 파일을 텍스트(Text) 파일이라고 한다.
ex: 프로그램에서 사용하는 소스 파일
<출처 : DO IT C언어 - 김성엽>