목록프로그래밍/C (25)
Jiyong's STUDY
동적 할당과 관련된 함수 calloc, realloc #include void *calloc(size_t elt_count, size_t elt_size); calloc 함수는 malloc 함수와 비슷하면서 조금 다르다.calloc 함수는 elt_count * elt_size 의 크기만큼 메모리의 공간을 할당하는데,malloc 함수는 인자를 size 하나 받는다. 즉 인자의 전달 방식에서 차이가 난다.또 하나, calloc 함수는 할당된 공간을 전부 0으로 초기화한다.즉, malloc 함수는 초기화 하지 않고 출력을 하면 쓰레기 값이 나온다는 이야기다. #include void *realloc(void *ptr, size_t size); realloc 함수는 힙 영역의 변수의 크기를 변경하는 함수이다. ..
메모리 공간을 할당하고 소멸시키는 malloc과 free 함수 #include void *malloc(size_t size); malloc 함수는 힙 영역에 메모리 공간을 할당한다.반환형이 void형 포인터임을 생각하여 용도에 따라 반환값에 대한 형변환을 시켜주어야 한다.인자로 size를 받는데, 이는 메모리 공간의 크기를 뜻한다.예를 들어 int형 변수 하나를 할당하기 위하여 malloc 함수를 선언하였다면 sizeof(int) 처럼 명시해주어야 한다! 참고로 메모리 할당에 실패하였다면 널 값을 반환한다. 즉 할당을 받고자 선언한 포인터는 널 포인터가 된다. #include void free(void *ptr); malloc 함수를 통하여 할당한 메모리 공간은 free 함수를 통하여 소멸이 가능하다.사..
C언어의 메모리 구조를 간단하게 알아보면 코드 영역 여기에는 이름 그대로 코드가 담겨있다. CPU는 필요할 때 마다 이 코드 영역에서 명령문을 가져간다. 데이터 영역 프로그램이 실행되었을 때부터 종료될 때까지 할당되어 해제되지 않는 변수가 이 데이터 영역에 상주한다.static 변수나 전역변수가 이 데이터 영역에 있다. 전역 변수는 이해가 되지만, static 변수에 대해서는 이해가 가지 않을 수 있다.static 변수는 static 지역변수라고 불리기도 하는데, 지역변수는 함수 안에서 선언되기 때문이다.하지만, 실제로는 static 지역변수 또한 프로그램이 시작되면 할당이 된다. 힙 영역 사용자가 직접 할당하고, 해제할 수 있는 메모리는 힙 영역의 메모리이다.이 영역엔 사용자가 변수를 할당하고, 해제 ..
파일 위치 지시자의 위치를 변경하게 해주는 함수 #include int fseek(FILE *stream, long offset, int wherefrom); 파일 위치 지시자? 처음 들어보는 말일 수도 있다. 이 지시자가 무엇이고 어디에 있는 지를 말하기에 앞서, 파일 구조체에 대하여 말하자면파일 구조체는 환경에 따라 다르다. 그러므로 파일 구조체가 어떻게 구성되었는지는 알기 힘들다.당연한 것이다. 왜냐하면 파일 스트림을 만드는 주체는 프로그래머가 아닌 운영체제이기 때문이다. 하지만 이것은 분명히 말할 수 있다. 파일 위치 지시자는 어느 환경에서도 파일 구조체의 멤버 중 하나다. 파일 위치 지시자는 쉽게 말해서 파일을 어디까지 읽어 들였는지, 받아 들였는지에 대한 위치를 가리킨다.파일에 Hello Wo..
typedef struct {int num1;double num2;char str[40];} datas; FILE *fp=fopen( ... );datas data; 이러한 구조체와 fp라는 파일 스트림이 있다고 가정할 때,이를 파일 스트림을 통하여 프로그램과 파일 사이에서 입출력을 하고자 한다. 이 때, 어떤 모드로 파일 스트림을 요청해야 하는가?텍스트 데이터와 바이너리 데이터가 섞여있으므로 헷갈릴 수 있다.하지만, 전혀 헷갈릴 이유도 없고 고민할 이유조차 없다.왜냐하면 어차피 프로그램과 파일 사이에서만 입출력을 할 것인데,텍스트고 바이너리고 아무 상관이 없지 않는가? 그렇다면 텍스트 모드로 입출력을 한다고 가정하자.이전에 배웠던 fprintf나 fscanf 함수를 사용한다고 가정하면 fprintf(f..
텍스트 파일과 바이너리 파일을 동시에 입출력 하기 위한 함수들 #include int fprintf(FILE *stream, const char *format, ...); #include int fscanf(FILE *stream, cont char *format, ...); 사용법은 앞에 스트림을 명시하는 것 이외에는 다른 점이 없다.반환 값 또한 마찬가지로 같거나 유사하다. fprintf의 반환 값은 출력 한 바이트 수, 실패시 0을 출력한다.fscanf의 반환 값은 지정된 형식과 동일한 입력의 수, 실패하거나 EOF에 도달하면 EOF를 출력한다. 텍스트 파일과 바이너리 파일을 동시에 입출력 하기 위한 함수들