Soft Ware/C 언어!! 38

file open 과 fileclose 에 대해서

우선 file open에 대해서 알아 보겠습니다. fopen(const char * filename, const char * mode) 형식을 갖추고 있다. 리턴 값으로는 파일을 지정한 모드로 열고 입출력에 필요한 FILE 구조체를 생성한 후 그 포인터를 리턴 에러가 발생하면 NULL을 리턴 한다 . 파일 이름 같은경우 경로까지도 입력 할수 있는데 예로 C\main\main.c 이라면 입력시에는 C\\main\\main.c로 입력 해야 된다. 그이유는 역슬러쉬 문자는 문자열내에서 확장열 표시에 사용되기 때문이다 . 이젠 모드에 대해서 알아 보겠다 . mode 같은 경우에는 r = 읽기 전용으로 파일을 열고 파일이 없으면 NULL이 리턴 된다 . w = 쓰기 전용으로 파일을 열고 파일이 없으면 새로 만들고..

파일 입/출력을 공부 하기전 스트림에 대해서 !!!

스트림이란 용어부터 공부 해야 겠네요 ㅠㅠㅋㅋ 스트림이란 바이트들이 순서대로 입출력 되는 논리적인 장비를 스트림이라고 하네요 스트림은 내부에 입출력 버퍼를 가지고 있으며 이 버퍼는 스트림에 의해 자동으로 관리된다고 하네요 스트림의 현재 상태는 FILE 이라는 구조체에서 기억한다고 하네요 struct _iobuf{ chat * _ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char * _tmpfname; }; typedef struct _iobuf FILE; FILE이라는 놈이 실제이구나 !! ^____^ 여기서 잠시 CR/LF에 대해 공부 !!! CR(Carriage return) / LF (Line feed) ..

구조체 패딩에 대해 알아 보겠습니다 ㅠㅠ

패딩이란 .... 인텔 x86의 32비트 에서는 레지스터가 32비트로 이루워졌습니다 . 그래서 한번 메모리를 access 할려면 32 비트로 접근 하는게 빠르겠죠? ㅎㅎㅎ 그래서 구조체에서는 패딩이 이루워 집니다. 자 구조체를 선언해 보겠습니다. struct List { int Data ; char a; double f; int nData; double b; short c; }; 패딩이 안 이루워졌다고 전제 하에 메모리 크기는 4+1+8+4+8+2 이겠죠? 하지만 실제 메모리는 이렇게 안됩니다 . 가장 큰 비트를 기준으로 4비트씩 할당합니다 . 즉 여기서는 double 이 8비트임으로 8비트로 설정 됩니다. 4+1+(빈공간 3)+8 +4+(빈공간 4)+8+ 2 로 이런식으로 이루워집니다 ^^ 자 그럼 패..

부동 소수점에 대해서 파헤쳐보았습니다 !!!

고정 소수점 보다 좀더 많은 소수를 나타 낼수 있는 장점이 있죠 !! 자 그럼 여기서 부동 소수점에 대해 알아 보겠습니다 ~~~ 부동 소수점은 부호 비트 , 지수부 , 가수부 로 나누워졌습니다 !!! float 형 같은 경우 부호 비트는 최상위 1비트인 31 번에 있는 비트가 부호 비트 입니다. 그리고 지수부는 음수와 양수를 나타내기 위해서 127이라는 바이너리라는것이 있습니다. 왜 있을까요? ㅡㅡ? 요건 위와 같이 음수를 나타내기 위한것입니다 . 8비트를 음수를 나타 내기 위해서 127 위의 값들은 양수가 되구요 127밑에 있는 숫자는 음수가 되겠죠 그럼 지수부를 어떻게 나타낼수 있는지 예제를 통해 알아보겠습니다. 음하하하하 오랜만에 블러그에 글을 올리니깐 기분이 좋네요 ^^ 자 2.14 와 -0.01..

퀵정렬 이해 및 소스

퀵정렬은 정렬 중 제일 빠르다고 다들 알고 있을 것이다 . 그럼 퀵정렬를 이해부터 하고 소스에 대해 말씀드리겠습니다. 퀵정렬은 피봇이라는 기준점을 두고 왼쪽에서 오른쪽으로 증가하는 방향 과 오른쪽에서 왼쪽으로 가는 감소하는 방향으로 나눈다 . 왼쪽에서 오른쪽으로 가는 방향은 피봇보다 무조건 작아야 된다 . 만약 피봇보다 같거나 크면 증가하는것을 멈춘다. 오른쪽에서 왼쪽으로 가는 방향은 피봇보다 무조건 커야된다. 위와 비슷하게 피봇보다 작거나 같으면 감소를 멈춘다. 이 멈춘곳에 화살표가 있다고 가정해 보자 그럼 두개의 화살표가 존재 할것이다. 서로 멈춘 두개의 화살표가 가지고 있는 데이터를 SWAP을 한다. 그리고 다시 화살표들은 증가 및 감소를 하는데 여기서 오른쪽 에서 왼쪽으로 가는 화살표가 왼쪽에서 ..

int main(int argc, char *argv[]) 에 대해서

공부가 잘 안되서 블로그 글을 쓰러 ^---^ 요즘 글을 잘 안써서 블로그가 ㅠㅠ 자 그럼 주제에 써있는 내용으로 들어가 보겠습니다. 우리가 메인문을 많이 쓰시죠? 자 메인문도 일종에 함수 입니다. 그럼 매개변수가 입력될수 있겠죠? 메인문에 매개변수 두개가 입력되었는데요 하나는 int 형에 argc이고 다른 하나는 2차 char형 포인터인 argv이네요 그럼 메인은 어떻게 매개 변수값에 넣을 수 있을까요? 첫번째 방법은 콘솔창에서 디렉토리까지 간 다음에 명령어를 입력하는방법과 두번째 방법은 솔루션 탐색기에서 오른쪽 마우스를 클릭해서 속성 창으로 이동한다음 디버깅에서 명령인수 값에 넣어주면 됩니다 저는 -x -n patten 이라고 입력해 보았습니다. 자 그럼 분석을 시작해 볼까요 int 형에 argc는 ..

realloc 의 의미와 사용방법

밑에 문자열에서 숫자만 추출하는 소스에서 우리는 realloc를 사용하여 동적메모리 할당을 하였습니다. 여기서 동적메모리 할당에 대해서 알아봅시다. 동적메모리는 Heap 영역에 위치하는 녀석으로 malloc , calloc,realloc 이 있습니다. malloc함수는 리턴값이 void*로서 인자값으로는 데이터형과 메모리의 개수를 입력 받습니다. 메모리를 할당 받을시에는 메모리 영역이 초기화 되지 않는 상태 이구요. 리턴받을시에는 리턴받을 포인터 형에 맞춰 줘야 합니다. calloc 함수는 malloc과 비슷하지만 다른점이 있습니다. malloc은 동적메모리를 한줄로 할당했다면 이 녀석을 같은 크기에 있는 녀석을 몇개 만듭니다. 결과적으로는 malloc과 메모리 크기는 같습니다. 그리고 또 한가지 다른점..