강좌 : 부스트캠프 모두를 위한 컴퓨터과학(cs50 2019)
메모리 | 저장값 |
---|---|
machine code | 컴파일된 바이너리 |
globals | 프로그램 안에서 저장된 전역변수 |
heap ↓ 쌓이면서 저장 ↑ stack | malloc으로 할당된 메모리의 데이터 프로그램 내의 함수와 관련된 것들 |
scanf
: 사용자로부터 형식지정자에 해당하는 값을 입력받아 저장하는 함수
#include<stdio.h>
int main(void)
{
int x;
printf("x: ");
scanf("%i", &x); // 스택 영역안에 s가 저장된 주소로 찾아가 입력한 값을 저장
printf("x: %i\n", x);
}
#include<stdio.h>
int main(void)
{
char s[5];
printf("s: ");
scanf("%s", s); // 크기가 5인 char자료형의 배열로 정의했기 때문에 그대로 입력
// 컴파일러는 문자배열의 이름을 포인터처럼 다룸
printf("s: %s\n", s);
}
fopen
함수를 이용하면 파일을 FILE이라는 자료형
으로 불러올 수 있다fopen
함수의 첫번째 인자는 파일이름, 두번째 인자는 모드로 r은 읽기
, w은 쓰기
, a는 덧붙이기
를 의미#include<stdio.h>
#include<cs50.h>
#include<string.h>
int main(void)
{
// 파일 열기
FILE *file = fopen("phonebook.csv", "a"); // csv : 쉼표로 분리된 값(엑셀 등)
// 사용자에게서 문자열을 입력받기
char *name = get_string("Name: ");
char *number = get_string("Number: ");
// 파일에 출력
fprintf(file, "%s,%s\n", name, number);
// 파일 닫기
fclose(file); // 작업이 끝난 후에는 파일에 대한 작업을 종료
}
fread
: 배열, 읽을 바이트 수, 읽을 횟수, 읽을 파일
char
값의 범위 : -128 ~ 127
unsigned
값의 범위 : 0 ~ 255
#include<stdio.h>
int main(int argc, char *argv[])
{
// 만약 2가 아니라면 파일명이 입력되지 않았거나 파일명 외의 다른 인자가 입력
if (argc != 2)
{
return 1; // 1(오류)을 반환하고 프로그램 종료
}
// 파일 열기
FILE *file = fopen(argv[1],"r");
if (file == NULL)
{
return 1;
}
// 파일에서 3bytes 읽기
unsigned char bytes[3]; // -128부터 127이 아닌 0부터 255범위의 값을 의미
fread(bytes, 3, 1, file);
// 모든 jpeg의 첫 세바이트는 무조건 ff,d8,ff로 시작
if (bytes[0] == 0xff && bytes[1] == 0xd8 && bytes[2] == 0xff)
{
printf("Maybe\n");
}
else
{
printf("No\n");
}
// 파일 닫기
fclose(file);
}