전체 글

하고 싶은 것들을 하며 성공하기
· C언어
1. 함수의 원형 malloc과 free 함수의 원형은 다음과 같다. void *malloc(unsigned int size); void free(void *p); malloc 함수의 반환형은 (void *) 형이라서 용도에 맞는 포인터 형으로 형 변환 후 사용해야 한다. 컴파일러 마다 자동으로 되는 것도 있지만 호환성을 위해선 꼭 해야 하는 과정이다. 2. 반환값이 널 포인터인지 반드시 확인하기 메모리 할당 함수는 원하는 크기의 공간을 할당하지 못하면 0번지인 널 포인터를 반환하게 된다. 이는 보통 NULL로 표기하는데 stdlib.h에서 매크로 정의로 0이라 되어 있기 때문에 전처리 과정에서 0으로 바뀐다. 즉 정수 0과 같다고 생각해도 된다. 그러나 널 포인터는 포인터의 특별한 상태를 나타내기 위해..
· 일상
휴...저 장염으로 개고생하다 왔어요ㅜ 다들 조심하라고 후기 남깁니다 ㅎ6일 동안 장염 동안 엄청 개고생하고 느낀건...고기는 꼭 완전 익혀먹기...물론 싱싱하지 않다면 잘 익혀먹어도 난리난다. 내 친구는 별 일 없는 거 보니 내가 좀 덜 싱싱한 부분을 먹은 모양이다.4주 프로그램 끝나고, 친구랑 부천 곱창 맛집 '황소 곱창' 가서 맛나게 소주와 고기를 때리고 왔다. 내가 뭘 먹었는지 품목과 그에 따른 굽기를 정도로 표현하면1. 곱창(웰던)2. 대창(웰던, 또는 더 기름기 쫙 빼서 쫀득바삭하게)3. 막창(웰던)4. 유창(레어? 핏기 없음)5. 벌양(레어? 핏기 없음)6. 천엽(생)7. 간(생)이 된다. 사장님께서 직접 구워주셨고, 난 믿고 먹었다만..3일 뒤 화요일에 몸살이 오더니 수요일부턴 폭풍이 왔다..
· C언어
int ary[3][4] 다음은 자료형이 int [4]이고 논리적으로 세 개의 일차원 배열을 요소를 갖는 2차원 배열이다. 여기에서 일곱 번째 물리적인 요소의 값에 접근하려면 먼저 포인터 연산을 할 것이기 때문에 정수 연산에 대해 변화하는 주소를 이해해야 한다. ary는 배열의 이름이자 이차원 배열의 첫 번째 부분 배열(ary[0])의 주소를 말한다. 그러므로 ary의 시작 주소를 100이라 가정하고, ary + 1처럼 정수 연산을 하게 되면 ary + 1 == ary + (1 * sizeof(ary[0])) == 100 + 16 == 116 이런 식으로 된다. 여기서 2를 더하면 바로 일곱 번째 요소에 접근할 수 있다고 생각할 수 있지만 (ary + 1) + 2로 하면 같은 원리로 ary + 3이 되어..
· C언어
Piscine 끝나고 C언어 책 목차를 쭉 보니까 4주 동안 이런걸 했었구나하는 생각이 든다. 생각 보다 굉장히 범위가 넓었던.... 하여튼 아직 15장을 보고 있으니 어서 끝내고 내가 하고 싶은 공부 이어서 해야지~~ 01-1 프로그램과 C 언어 01-2 컴파일과 컴파일러 사용법 02-1 C 프로그램의 구조와 데이터 출력 방법 02-2 상수와 데이터 표현 방법 03-1 변수 03-2 데이터 입력 04-1 산술 연산자, 관계 연산자, 논리 연산자 04-2 그 외 유용한 연산자 05-1 if문 05-2 if문 활용과 switch ~ case문 06-1 while문, for문, do ~ while문 06-2 반복문 활용 07-1 함수의 작성과 사용 07-2 여러 가지 함수 유형 08-1 배열의 선언과 사용 ..
요즘 우분투를 이용해서 편안하게 git add부터 push를 하고 있던 참인데 잔디가 채워지지 않았다. 분명 10월 1일부터 열심히 push해왔는데 ㅠㅜㅜ 어제도 했는데 왜 안 될까 찾아봤다. 그래서 나타나는 메시지를 확인해본 결과... github의 권한을 가져오지 않고 local 도메인으로 push를 하고 있었고... 저기 나오는 세 개의 명령어만 입력하면 바로 github 권한으로 commit할 수 있었다~~ 유후~
· C언어
1. auto, register, static 예약어 종류 지역 변수 전역 변수 예약어 auto register static 없음 static 선언 위치 코드 블록 내부 함수 외부 사용 범위 선언 ~ 선언한 블록 끝 프로그램 전체 하나의 파일 내부 메모리 존재 기간 선언 ~ 선언한 블록 끝 프로그램 시작 ~ 종료 자동 초기화 없음 0으로 자동 초기화 메모리 위치 스택 영역 레지스터 데이터 영역 2. 지역 변수의 주소 반환 int *get_num(void) { int n; scanf("%d", &n); return (&n); } 이런 식으로 반환하게 된다면 지역변수의 주소를 반환하기 때문에 에러 메시지를 보낸다. 왜냐하면 이 작업 이후 get_num 함수가 종료되면 n이 할당받았던 메모리를 반환하게 되고,..
· C언어
문제를 풀면서 함수를 살펴 보겠습니다. 키보드로 입력한 단어의 길이가 5자를 넘는 경우 6자부터 별(*)을 출력하는 프로그램을 작성합니다. 단어의 최대 길이는 15자로 제한합니다. (실행창에 출력되는 결과는 제가 작성한 main 함수를 참고해주세요) #include intft_strlen(char *str) { intsize; size = 0; while (*str != '\0') { size++; str++; } return (size); } char*ft_strncpy(char *dest, char *src, unsigned int size) { char*po; intcount; count = 0; po = dest; while (*src != '\0' && size > count) { *dest++..
· C언어
배열의 문자열 초기화는 여러 가지 방법이 있는데 가장 대표적인 대입 연산자를 사용한 방법으로는 두 가지가 있다. 배열 요소에 하나씩 대입해가며 마지막에 널 문자까지 넣어주는 방법과 배열 선언과 동시에 바로 큰 따옴표를 이용해 문자열을 초기화하는 것이다. 하지만 여기서 유의할 점이 있다. C언어를 조금 공부해봤다면 다들 아시겠지만 문자열은 C언어 컴파일 과정에서 주소값을 반환한다. 그런데 배열 선언 동시에 초기화하는 것은 주소를 배열에 넣는 것이 아니라 각각 배열의 요소가 초기화되고 마지막에 널 문자까지 붙여준다. 결국 사진의 주석처럼 선언을 이미 한 이후 대입을 시도할 시 문자열의 첫 번째 문자의 주소(문자열이 임시로 저장되어 있는 배열의 첫 번째 요소의 주소)를 char형에 넣어버리는 것이고, str1..
jayoon
자윤 블로그