일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- socket
- 문자열 다루기
- foreground service
- 연결리스트
- 콘솔 키보드 이벤트
- 자료구조
- dictionary
- 딕셔너리
- flutter
- Kotlin
- 파일입출력
- ws2_32.lib
- Android
- InfluxDBClient
- 진수변환기
- 문자열파싱
- InfluxDB
- vs code
- 메모리반환
- 문자열다루기
- Mat 변수
- 코틀린
- FTP
- background service
- C
- vscode
- Linked List
- 소켓프로그래밍
- UI
- dart
- Today
- Total
목록전체 글 (33)
무슨 일로 C 하셨습니까?

여러 프로젝트를 진행하다보면 아니 그냥 살다보면 두 대 이상의 컴퓨터에 자료가 저장되어있는 경우가 존재하며 한 컴퓨터에 존재하는 자료를 다른 자료로 옮겨야 할 경우가 생긴다. USB나 외장하드, 카카오톡, 메일 등 다양한 방법으로 자료를 옮기고 공유할 수 있다. 그런데 공유 폴더를 생성할줄 모른다면 마땅한 usb 포트를 꽂기 귀찮다면 PC 카톡에 매번 로그인하기 귀찮다면 메일 등으로 옮기기에 파일 사이즈가 크다면 다양한 이유로 옮기기 힘든 이유가 생길 수 있다. 이것을 내 방식대로 프로그래밍 해서 해결해보겠다.

C를 가지고 여러 가지 프로그램을 만들다 보면 모종의 이유로 메모리 관리에 신경 쓰게 된다. 이러한 메모리를 반환시키는 함수를 만들도록 하겠다. 사실 동적할당된 메모리만 free()를 사용해서 반환하면 그만이다 그런데 해당 변수가 어디서 선언됐는지 모르면 이야기가 달라진다 ( 포인터가 가르키는 메모리가 동적 변수인지 지역변수인지 알 방법이 없다) 지역변수를 free()하면 에러가 발생하기 때문에 정체모를 메모리를 반환시켜주는데 큰 애로 사항이 꽃피기 시작한다. 고로 자동으로 구분해서 메모리를 반환하는 함수를 만들어주면 되겠다 함수 기능 메모리를 알아서 잘 반환 시켜줌 입력값 어디서 선언됐는지 모를 메모리 주소 대충 설계를 해보자면 메모리가 어디에 할당됐는지 알기만 하면 되는데 그것을 알방법이 주소뿐이니 ..
추가로 필요한 함수를 더 만들어보자 int DICTIONARY_Delete(dictionary* head, char* key) { _dictionary* ptr = head->head; _dictionary* pre = NULL; while (true) { if (ptr == NULL) return false; else if (StringCompare(ptr->key, key) == COMPARE_SAME) break; pre = ptr; ptr = ptr->link; } if (pre == NULL) { free(ptr); head->head = NULL; } else { pre->link = ptr->link; free(ptr); } head->count--; return true; } 삭제 함수는 ..
파이썬을 사용하다보면 은근히 많이 사용되는게 바로 딕셔너리다 key - value 로 값을 접근하고 저장할 수 있다는 점이 상당히 매력적이다 그런 매력적인 자료형을 C에서 사용하지 아니할 수 없다 고로 구현해보자 typedef struct _DICTIONARY { char* key; void* value; struct _DICTIONARY* link; }_dictionary; typedef struct DICTIONARY { int count; struct _DICTIONARY* head; }dictionary; 우선 구조체 부터 만들면 다음과 같다 전체적인 부분은 연결 리스트와 동일하나 value 값으로 문자열 뿐만아니라 숫자 다른 구조체 등 여러 자료형을 동시에 받을 수 있도록 void형 포인터를 사..
리스트를 정의하고 맨 뒤에 데이터를 추가하는 함수까지 만들었다 추가로 리스트에 필요한 여러함수를 구현하자 우선은 데이터가 잘 들어갔는지 확인도 할겸 출력함수 부터 구현하자 void LIST_Show(list head) { node* temp = head.body; int i = 0; printf("--- total count : %d\n", head.count); while (temp!=NULL) { printf("%d - %s\n", i,temp->data); i++; temp = temp->link; } } 코드 로직적으로 복잡할게 없고 에러가 발생할 일도 없으니 간단하게 구현했다. 그 다음은 전체 메모리 반환이다. 메모리를 썼으면 적절하게 반환하는걸 잊지말자 int LIST_Release(list*..
C하면 자료구조. 자료구조하면 리스트가 아니겠는가 사실상 큐나 스택 트리 그래프 모두 리스트가 베이스라고 생각된다. 고로 리스트를 구현해보자 우선 구조체를 만들어보자 typedef struct NODE{ char* data; struct NODE* link; }node; typedef struct LIST{ int count; struct NODE* body; }list; 이름들은 아주 직관적으로 짓겠다. NODE (body) data 실제 데이터가 저장되는 변수 link 다음 리스트를 가르키는 포인터 LIST (head) count 리스트의 전체 크기 body 실제 리스트를 가르키는 포인터 구조체를 두개로 구현하여 멋을 가미시켜주자 리스트에 저장될 데이터는 숫자일수도 있고 문자일수도 있고 모르는 일이나..

한가롭게 토익준비나 하고 있는데 급하게 처리해야할 일이 생겼다. 엑셀파일에서 특정 특정데이터를 다른 데이터로 바꿔야하는데 엑셀파일을 직접 열어서 수정해도 되고 자동으로 변환해주는 프로그램을 만들어도된다. 일일이 수정하는건 컴공과로써 자존심이 허락하지 않는다 물론 프로그램으로 만들때 C#이나 자바 파이썬으로하면 편할텐데 굳이 C로 구현해야 제맛이기 때문에, 그것도 헤더참조하지 않고 직접해야 제맛이다. 고로 해당 프로그램에 핵심 작업을 하게될 문자열 치환함수를 만들어보겠다. 함수 기능 문자열에서 문자열(문자)를 특정 문자열(문자)로 치환시킴 입력값 source(문자열), From(문자열), To(문자열) 반환값 문자열(Token) 배열 치환된 문자열 char* StringSwitcher(char* Src, ..

Opencv을 사용하는 프로젝트를 진행하다가 에러가 발생했다. 딱 보기에도 Mat형식의 변수가 release되는 과정에서 에러가 발생하는 것 같다. 정확한 에러가 어느 부분에서 발생하는지 확인해 봐야겠다. 프로그램의 구조는 위와 같은데, 서버-클라이언트 통신 방식에서 한 클라이언트가 보낸 이미지 데이터(Mat)를 서버가 받아서 다른 클라이언트에게 뿌려주는 구조다. 이때 비동기적 작업을 위해 Thread를 사용했는데, 특정 Thread가 종료될 때, Thread가 사용하던 클라이언트의 이미지 데이터를 담는 변수(Mat 형)에서 해당 에러가 발생했다. 에러가 발생한 코드가 내가 작성한 코드가 아니다 보니 코드를 수정할 수는 없을 것 같다. 메모리를 사용했다면 자동으로 할당한 메모리를 해제해주는게 당연한데 난..