티스토리 뷰
아래 코드는 파일의 내용을 읽어서 파일의 형식이 JPEG 이미지인지를 검사하는 코드이다.
#include <stdio.h>
int main(int argc, char *argv[])
{
if (argc != 2)
{
return 1;
}
FILE *file = fopen(argv[1], "r");
if (file == NULL)
{
return 1;
}
unsigned char bytes[3];
fread(bytes, 3, 1, file);
if (bytes[0] == 0xff && bytes[1] == 0xd8 && bytes[2] == 0xff)
{
printf("Maybe\n");
}
else
{
printf("No\n");
}
fclose(file);
}
먼저 사용자로부터 파일명을 입력받는다.
만약 argc가 2가 아니면 파일명이 입력되지 않았거나 다른 인자가 입력되었기 때문에
1을 리턴하고 프로그램을 종료한다. (명령행 인자 참고)
2이면 argv[1](입력받은 파일명)을 r(읽기)모드로 불러온다.
여기서 입력받은 파일이 제대로 열리지 않으면 fopen 함수는 NULL을 반환한다.
따라서 NULL이면 1을 반환하고 프로그램을 종료한다.
파일이 잘 열렸다면,
크기가 3인 bytes 문자 배열을 만든 후,
fread 함수를 통해서 파일의 첫 3바이트를 읽어온다.
fread 함수의 인자는 (배열, 읽을 바이트 수, 읽을 횟수, 읽을 파일) 이다.
JPEG 파일인지 확인하려면 읽어들인 바이트가 각각 0xff, 0x88, 0xff여야 한다.
따라서 이를 if문으로 확인해서 맞으면 Maybe, 아니면 No를 출력하고
파일을 종료한다.
'부스트코스 > 5. 메모리' 카테고리의 다른 글
[CS50] 5.8 파일 쓰기 (0) | 2021.02.07 |
---|---|
[CS50] 5.7 메모리 교환, 스택, 힙 (0) | 2021.02.06 |
[CS50] 5.6 메모리 할당과 해제 (0) | 2021.02.06 |
[CS50] 5.5 문자열 복사 (0) | 2021.02.05 |
[CS50] 5.4 문자열 비교 (0) | 2021.02.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- intersectionObserver
- vanillajs
- overflow
- form
- valgrind
- 함수
- 구조분해할당
- malloc
- 연결리스트
- CSS
- capturing
- Typography
- 이벤트위임
- CSSOM
- RenderTree
- 선형검색
- 포인터
- 폼
- 비구조화할당
- Dom
- 선택자
- float
- pseudo
- 구조체
- HTML
- 문자열
- Big Ω
- sr-only
- 프로젝트
- 동기처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함