전체 글

189

C 표준입출력과 버퍼와 스트림

이때까지 썼던 printf함수, scanf함수 모두 표준 입출력 함수입니다. 버퍼 이런 표준 입출력 함수를 통해 데이터를 입출력 하는경우 해당 데이터들은 운영체제가 제공하는 '메모리 버퍼'를 중간에 통과하게 됩니다. 메모리 버퍼는 데이터를 임시로 모아두는(저장하는) 메모리 공간입니다. 키보드로 입력된 데이터가 입력스트림을 거쳐서 입력 버퍼로 들어가는 시점은 엔터 키가 눌리는 시점입니다. 엔터키를 누르기 전에는 fgets 함수가 문자열을 읽어 들이지 못하는 것입니다. 엔터키를 누르기 전까지는 입력버퍼가 비워져 있습니다. 스트림 먼저 입력이란 프로그램 안으로 데이터가 흘려 들어오는 것을 말합니다. 대표적인 입력 장치로 키보드, 파일이 있습니다. 출력이란 프로그램 밖으로 데이터가 흘러 나가는 것을 말합니다. ..

프로그래밍/C 2019.05.20 Plorence

C언어 함수 포인터와 void 포인터

함수 포인터 함수의 이름은 포인터입니다. 마치 배열의 이름이 포인터인듯이 함수의 이름도 포인터입니다. 이걸 함수 포인터라고 하고 배열의 이름과 마찬가지로 상수 형태입니다. 함수 포인터의 특징 함수의 이름은 함수가 저장된 메모리 공간을 가리키는 포인터이다(함수 포인터). 함수의 이름이 의미하는 주소 값은 함수 포인터 변수를 선언해서 저장할 수 있다. 함수 포인터 변수를 선언할려면 함수 포인터의 형(type)을 알아야한다. 함수 포인터의 형 함수 포인터의 형 정보에는 반환형과 매개변수 선언에 대한 정보를 담기로 약속합니다. 즉, 함수의 반환형과 매개변수 선언이 동일한 두 함수의 함수 포인터 형은 일치합니다. 함수 포인터의 형을 함수 시그니처(function signature)라고도 부르는데,이건 C++ 함수..

프로그래밍/C 2019.04.18 Plorence

포인터의 포인터(이중 포인터)에 대한 이해

보통 그냥 포인터라고 하면 포인터를 선언할 당시에 *연산자가 하나만 쓰입니다. 선언할 때 *연산자를 더 늘려서 이중, 삼중까지 가능합니다. 영어로는 더블 포인터,트리플 포인터라고 부릅니다. 이중 포인터 이중 포인터는 그나마 쓰이지만 삼중 포인터는 잘 안 쓰입니다. 이중 포인터는 2차원 배열이나 포인터 그자체를 다뤄야 할 때 많이 쓰입니다. 이중 포인터 선언 Type ** Name; *연산자 1개 더 붙여주면 됩니다. 이중 포인터에 대한 이해 이중 포인터를 이해하려면 단일 포인터와 *연산자를 빠삭하게 이해하고 있어야 합니다. #include int main(void) { int num = 10; int * ptr = # int ** dptr = &ptr; } 하나씩 어떠한 값을 가지고 있는지 알아봅..

프로그래밍/C 2019.04.18 Plorence

C언어 다차원 배열

다차원 배열 C언어에서 1차원을 배우다 보면 다른 차원도 있다고 생각하실 겁니다. 크게 3차원까지 있는데 3차원도 잘 안 씁니다. 더 나아가 배열의 크기만 안 넘는다면 4차원 이상도 가능합니다. 2차원 배열 2차원 배열은 그대로 면 형태를 이루고 있습니다. 2차원 배열의 선언 방식 TYPE 배열이름[세로길이][가로길이]; 이때 배열의 사이즈는 세로길이*가로길이가 되겠습니다. 2차원 배열을 선언과 동시에 초기화 하는 방법 초기화 리스트 안에는 행 단위로 초기화할 값들을 별도의 중괄호로 명시합니다. int arr[3][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; 아래는 결과입니다. 1|2|3 4|5|6 7|8|9 채워지지 않은 빈공간(초기화를 하지 않은 배열 원소)은 0으로 초기화됩니다...

프로그래밍/C 2019.04.18 Plorence

더 나은 개발자로 성장합는 팁, " 로그를 잘 남기세요."

모든 개발자가 봤으면 하는것들 2019.04.17 Plorence

상수 형태의 문자열을 가리키는 포인터

배열에서도 문자열을 다룰 수 있듯이, 포인터에서도 가능합니다. 포인터에서 동적 할당을 사용하여 읽기/쓰기 전용으로도 가능하지만, '읽기' 전용이 필요한 경우에 동적 할당을 쓰지 않고 "상수 형태의 문자열"을 사용해도 됩니다. 문자열 시점에서 배열과 포인터가 다른 점 char str[] = "my string"; char * str2 = "Your string"; 첫 번째 줄인 배열은 배열을 기반으로하는 '변수 형태의 문자열'입니다. 포인터를 기반으로 문자열을 선언하는 것도 가능합니다. 두 번째 줄인 포인터는 메모리공간을 수동으로 만들어주지 않았기 때문에 "Your string"이라는 문자열은 자동으로 할당되고 문자열의 첫문자 Y의 주소값이 반환이 되어 str2에 대입됩니다. Y의 메모리주소가 반환이 되어..

프로그래밍/C 2019.04.17 Plorence

포인터 연산

포인터 연산 포인터 연산이란 말그대로 포인터를 대상으로 하는 연산입니다. *연산자를 사용할경우에는 포인터가 지시하고 있는 메모리공간에 접근하여 연산합니다. 연산자는 +=,-=,++,--,*,/ 등 모든 연산자를 사용할 수 있습니다. int * ptr; ptr = ptr + 1; ptr+1을 하게되면 포인터 변수 ptr이 가리키는 대상이 아닌 포인터 변수 ptr에 저장되어있는 주소값자체를 1 올려줍니다. 근데 여기서 특이한 점이 있습니다. 실제로는 진짜 1이 아니고 포인터형 타입의 사이즈만큼 올려줍니다. 즉 2를 올려준다면 '포인터형의 사이즈 * 2'값을 주소값에서 더해주는겁니다. int 형 포인터 변수 ptr가 000004를 가지고 있고 ptr + 1해준다면 포인터 변수 ptr는 000008을 가지게 됩..

프로그래밍/C 2019.04.17 Plorence

C언어 포인터

C언어의 꽃, 포인터(Pointer) 포인터는 C언어의 꽃이라고 할 수 있으며 정말 많이 쓰입니다. 변수는 메모리 영역에 저장돼있고 메모리 주소는 이 변수가 메모리 영역 중 어디에 위치해있느냐를 나타냅니다. 이 메모리 주소를 가지고 포인터를 사용하여 읽기/쓰기가 가능합니다. 포인터 변수란 메모리의 주소 값을 저장하기 위한 변수입니다. 포인터의 개념 "포인터는 어렵다"는 써먹기 어려운 거지, 개념 자체는 매우 쉽습니다. 이점은 C언어의 다른 문법에도 어느 정도 해당하는 말입니다. 변수가 메모리에 할당될 때 어디에 위치해있냐를 알기 위해 특별한 연산자가 제공됩니다. 포인터는 이 위치 값을 참조하여 접근해서 읽기/쓰기를 하는 겁니다. 예로 하나 들어보자면 청와대라고 하면 정확히 위치가 어디인지 모르시는 분이 ..

프로그래밍/C 2019.04.17 Plorence

내가 생각하는 개발을 배우고자 하는 자세

블로그 글 쓴지 4년이 넘었지만,그래도 글을 잘 못쓰는 점 이해 부탁드립니다. 우선 "개발을 배우고자 하는 자세"에 대해 글을 쓰는 이유는 여러 커뮤니티에서 자기가 질문한 게시글을 답변 받고 삭제하는 상황을 보았기 때문입니다. 저 또한 당했고요. 네이버 카페에만 국한되는진 모르겠다만 제가 파악한건 네이버 카페에서 봤습니다. 저도 깊게 생각해본 부분이고 제목과 같은 생각이나, 개발 공부를 하시는 초보 분이라면 봐주셨음 합니다. 제가 생각하는 개발을 배우고자 하는 자세입니다. 개발을 배우고자 하는 자세란 무엇일까? 마음가짐, 행동 또는 공부방법 등 개발 공부에 관련된거라면 어느것이든 해당된다고 생각합니다. 제가 생각하는 네 가지들 입니다. 1.모르는걸 부끄러워 하지 말자 이거 때문에 글을 쓰게 된 이유기도 ..

모든 개발자가 봤으면 하는것들 2019.04.15 Plorence

티스토리 코드 블럭 입맛대로 바꾸기

티스토리의 새로운 에디터 베타를 시작하고 티스토리 가이드에 코드 블록에 관한 게시글이 올라왔습니다. 지원하는 건 좋지만 기본적으로 지원되는 언어도 몇 없고 라인 넘버 표시가 안됩니다. 그리고 에디터 때문인지 colorscripter.com에서 복사한 코드가 개판으로 만들어진다는 것.. 어느순간 플러그인으로 지원하기 시작했습니다. 이게 귀찮으신 분들은 블로그 관리에서 플러그인 사용해서 쓰세요. 코드 하이라이트 적용 - Highlight.js Highlight.js에 들어가서 코드 하이라이트가 필요한 언어만 체크하고 다운로드합니다. 그다음은 style을 지정해야 하는데 예시는 데모 사이트가 있습니다. 다운로드하고 블로그 설정 -> 스킨 변경 -> 스킨 편집 -> html 편집 -> 파일 업로드에서 highl..

기타 강좌 2019.04.01 21 Plorence

시놀로지 DLM 공유(2019.03)

지금은 하나밖에 없지만, 차차 늘려갈 계획입니다. 깃허브 아이디 있으신 분들은 Watch 걸어두세요. Github 삭제했습니다.

개발 작품 2019.03.28 Plorence

오토핫키 서버 연동(로그인,회원가입) 라이브러리

계속 만든다는 걸 미루고 미루다가 이제야 만들었습니다. 기능 1PC 1계정 가입할 때 입력한 이메일로 비밀번호 변경 가능 패스워드 암호화 일반, 관리자 용도로 라이브러리 분리 함수가 아닌 클래스화(중복 로그인을 구현하게 된다면 좋은 방법이긴 한데, 중복 로그인 기능 없음.) 소스코드와 자세한 설정 방법은 Github에 있습니다.

개발 작품 2019.03.28 Plorence