일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- socket
- foreground service
- Linked List
- 문자열파싱
- C
- 진수변환기
- background service
- Android
- 문자열 다루기
- 문자열다루기
- 코틀린
- 콘솔 키보드 이벤트
- InfluxDBClient
- vscode
- 딕셔너리
- dictionary
- 파일입출력
- 메모리반환
- 연결리스트
- dart
- 자료구조
- UI
- 소켓프로그래밍
- flutter
- ws2_32.lib
- FTP
- Kotlin
- Mat 변수
- vs code
- InfluxDB
- Today
- Total
목록C (19)
무슨 일로 C 하셨습니까?
소켓 프로그래밍을 통해 서버-클라이언트를 만들어보겠다. 서버와 클라이언트의 기본적인 TCP연결 및 메시지 보내기는 조금만 검색해보아도 금방 나오고, 내용 또한 금방 이해를 할 수 있다. void server() { WSADATA wsa; WSAStartup(0x0202, &wsa); SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN serv; memset(&serv, 0, sizeof(serv)); serv.sin_addr.S_un.S_addr = INADDR_ANY; serv.sin_family = AF_INET; serv.sin_port = htons(9000); int serv_sz = sizeof(serv); if (bind..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eQEOqV/btqO3zNkbCQ/bncvJQYFmHCXwNYV8BLT9k/img.png)
여러 프로젝트를 진행하다보면 아니 그냥 살다보면 두 대 이상의 컴퓨터에 자료가 저장되어있는 경우가 존재하며 한 컴퓨터에 존재하는 자료를 다른 자료로 옮겨야 할 경우가 생긴다. USB나 외장하드, 카카오톡, 메일 등 다양한 방법으로 자료를 옮기고 공유할 수 있다. 그런데 공유 폴더를 생성할줄 모른다면 마땅한 usb 포트를 꽂기 귀찮다면 PC 카톡에 매번 로그인하기 귀찮다면 메일 등으로 옮기기에 파일 사이즈가 크다면 다양한 이유로 옮기기 힘든 이유가 생길 수 있다. 이것을 내 방식대로 프로그래밍 해서 해결해보겠다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n5KS9/btqKWWfIAtz/vuE1gPG2lfrcgExHa6KPGk/img.png)
C를 가지고 여러 가지 프로그램을 만들다 보면 모종의 이유로 메모리 관리에 신경 쓰게 된다. 이러한 메모리를 반환시키는 함수를 만들도록 하겠다. 사실 동적할당된 메모리만 free()를 사용해서 반환하면 그만이다 그런데 해당 변수가 어디서 선언됐는지 모르면 이야기가 달라진다 ( 포인터가 가르키는 메모리가 동적 변수인지 지역변수인지 알 방법이 없다) 지역변수를 free()하면 에러가 발생하기 때문에 정체모를 메모리를 반환시켜주는데 큰 애로 사항이 꽃피기 시작한다. 고로 자동으로 구분해서 메모리를 반환하는 함수를 만들어주면 되겠다 함수 기능 메모리를 알아서 잘 반환 시켜줌 입력값 어디서 선언됐는지 모를 메모리 주소 대충 설계를 해보자면 메모리가 어디에 할당됐는지 알기만 하면 되는데 그것을 알방법이 주소뿐이니 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/XYW8N/btqJDlnwqvR/kK6JB0i1UShKHsC7leEA60/img.png)
한가롭게 토익준비나 하고 있는데 급하게 처리해야할 일이 생겼다. 엑셀파일에서 특정 특정데이터를 다른 데이터로 바꿔야하는데 엑셀파일을 직접 열어서 수정해도 되고 자동으로 변환해주는 프로그램을 만들어도된다. 일일이 수정하는건 컴공과로써 자존심이 허락하지 않는다 물론 프로그램으로 만들때 C#이나 자바 파이썬으로하면 편할텐데 굳이 C로 구현해야 제맛이기 때문에, 그것도 헤더참조하지 않고 직접해야 제맛이다. 고로 해당 프로그램에 핵심 작업을 하게될 문자열 치환함수를 만들어보겠다. 함수 기능 문자열에서 문자열(문자)를 특정 문자열(문자)로 치환시킴 입력값 source(문자열), From(문자열), To(문자열) 반환값 문자열(Token) 배열 치환된 문자열 char* StringSwitcher(char* Src, ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxBM7q/btqHU8P54Ff/NgO3m5jfHoNebQUBoGRfhk/img.jpg)
솔직히 문자열 다루는 항목에선 가장 고급기술이 아닐까 싶다. 물론 이 기능을 하는 함수도 에 존재하지만 직접 구현해 볼것이다. 간단히 구상해보면 기본 문자열(Source)에서 특정 구분자[문자열/문자](separator)를 기준으로 나누어서 각 문자열들을 배열의 형태로 반환시키도록 할 것이다. 함수 기능 문자열을 특정 문자열(문자)을 기준으로 나눔 입력값 source(문자열), separator(문자열) 반환값 문자열(Token) 배열 나누어진 여러 문자열들 char** g(char* Src, char* Sep) { return NULL; } ( Src : Source / Sep : Separator -> 구분자 ) 함수를 선언해준다. 이전에 만든 함수를 통해 Source에서 Separator가 얼마나 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nnloV/btqHXEtvddE/AzeLoFW90VwU6svr5XY6z0/img.png)
문자열 검색 기능은 실제론 많이 사용해 본적이 없다. 그러나 다음에 구현해 볼 문자열 토큰함수를 위해 미리 구현해야 한다. 구현에 앞서 잠깐 설계를 해보자면 source가 될 문자열과 해당 문자열에서 찾을 문자 혹은 문자열 target, 을 입력하고 반환값으로 source에 target이 얼마나 포함되어있는지와 포함되어있는 인덱스들을 함께 정수형 배열로 반환할 것이다. 함수 기능 문자열에서 특정 문자열의 위치를 찾아내는 함수 입력값 source(문자열), target(문자열) 반환값 정수형 배열 일치하는 위치 수, 각 위치들 함수를 선언해준다 int* f(char* Src, char* Target) { return NULL; } 반환할 정수형 배열의 크기는 1 + n인데 ( n: 문자열이 일치된 위치들,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/qcm0L/btqHUbFpOE8/trcgaGLCfKRKFA6o8X5Wzk/img.png)
string.h 헤더파일을 참조하여 strcmp() 함수를 사용하여 쉽게 문자열을 비교할 수 있다. 그러나 난 굳이 두 문자열을 비교하는 함수를 만들 것이다. 이름 없는 함수부터 만들고 시작하자 #define SAME 0 #define NOT_SAME 1 int f(char* StringA, char* StringB) { return NOT_SAME; } 이번엔 뭔가 느낌있어보이게 상수도 사용해보도록 하자 문자열 비교는 어려울 것이 없다. 문자열 즉 문자 배열에서 각 문자가 일치하는지 확인하면 된다. #define SAME 0 #define NOT_SAME 1 int f(char* StringA, char* StringB) { int LengthA = StringLength(StringA); int Le..
C에도 기본적으로 제공되는 함수들이 매우 많아서 몇개의 헤더파일만 포함시켜도 다양한 함수를 사용할 수 있다. 그런데 난 굳이 직접 만들어서 사용할 것이다. 최소한의 헤더만을 사용해서 이번엔 그 대상을 문자열로 하겠다. 실제로 많은 데이터를 문자열로 다루는데 문자열 함수가 생각보다 많이 불친절하다고 느꼈기 때문에 직접 만들어 쓰겠다. 그 시작은 문자열 합성함수이다. 시작은 이름없는 함수 선언부터 시작한다. char* f(char* HeadString, char* TailString) { return NULL; } 두 문자열을 합해서 반환하는 함수를 구현하겠다. 순서는 당연히 head-tail순이다. int HeadLen = StringLength(HeadString); int TailLen = String..