C

    반응형
Back End/C

[C] 문자열 함수 정리 (string.h)

C 의 문자열은 결국 '\0' 으로 끝나는 char 배열이다. str 함수들은 전부 이 '\0' 을 믿고 움직인다.C 의 문자열이란?C 에는 string 타입이 따로 없다. 문자를 char 배열에 한 칸씩 넣고, 끝에 '\0' (널 문자)을 붙여서 "여기까지가 문자열"이라고 표시한다. char s[] = "hello"; // 실제로는 'h','e','l','l','o','\0' → 6바이트 그래서 문자열을 담을 공간은 항상 글자 수 + 1 이 필요하다. 이 + 1 을 까먹는 게 문자열 버그의 대부분이다.str 함수들은 크기를 따로 받지 않고 '\0' 이 나올 때까지 계속 읽는다. '\0' 이 없으면 배열 밖까지 계속 읽어버린다. strlensize_t strlen(const char *s); '\0..

Back End/C

C - gdb 사용하는 방법, 명령어

gdb란?실행 중인 C 프로그램을 원하는 지점에서 멈추고, 그 순간의 변수 값, 메모리, 호출 스택을 들여다보는 도구이다. 사용방법gcc 로 컴파일gcc 는 디버그 정보를 실행 파일에 넣는다. C 언어 - GCC 정리gcc란gcc는 .c 파일을 CPU가 실행할 수 있는 파일로 번역하는 프로그램이다. gcc -Wall -g hello.c -o hello # 컴파일./hello # 실행 gcc 는 전처리 → 컴파일 → 어셈블 → 링크를 한 번에 해준다. 에러 종류를skylarcoding.tistory.comgcc -g -O0 -Wall main.c -o main 나는 보통 run → bt → b (에러난 줄) → r (재실행) → n & info locals 로 문제 확인 흐름으로 진행한다. 핵심 ..

CS/CSAPP 컴퓨터 시스템

지역 변수는 스택(stack)에 두고, 동적 할당 데이터는 힙(heap)에 두는 이유

데이터가 언제까지 살아있어야 하는지를 생각해봐야 한다. 지역 변수를 스택에 두는 이유함수 호출에는 규칙적인 순서가 있다. main 에서 A 를 호출하고, A 가 B, B가 C 를 호출하면 C → B → A → main 순서로 끝난다. 끝나는 순서는 반드시 LIFO 구조이다. 이 규칙이 스택 자료구조와 정확히 일치한다. 함수가 호출될 때 그 함수에 들어온 공간(스택 프레임)을 스택 맨 위에 쌓고, 함수가 끝나면 맨 위부터 차례로 제거한다.이 방법의 장점은 두 가지이다.빠르고 단순하다.공간을 잡는 건 스택 포인터를 내리는 것이고, 반납하는 건 다시 올리는 것뿐이다. 어디가 비었는지 찾을 필요가 없다.자동으로 정리된다. 함수가 끝나면 그 함수의 지역 변수는 필요 없으니, 프레임을 걷어내는 순간 같이 반납해도 ..

CS/CSAPP 컴퓨터 시스템

CSAPP 컴퓨터 시스템 Ch3 (3.8 ~ 3.11)

다른 CSAPP 글 보러가기 'CS/CSAPP 컴퓨터 시스템' 카테고리의 글 목록Hello Worldskylarcoding.tistory.com 3.8 배열배열 원소를 가리키는 포인터를 만들고 그 포인터로 산술 연산을 할 수 있다는 점이 특이하고, 전부 주소 계산으로 번역된다. 기본 원리T A[N]; 은 연속된 메모리 덩어리를 잡고, A 는 시작 주소를 값으로 갖는 포인터가 된다.A[i] 의 주소 = 시작주소 + (원소크기 x i)배열 접근이 빠른 이유는, 어디 있는지 찾아다닐 필요 없이 계산 한 번으로 주소가 나온다. 포인터 연산포인터 연산은 자동으로 스케일 된다. int *p 에서 p + 1 은 주소가 1 늘어나는게 아니라 4 늘어난다. 타입 크기만큼 자동으로 곱해진다.C 에서 A[i]..

Back End/C

C 언어 헷갈리는 개념 정리

*는 자리에 따라 뜻이 다르다int *p = &x; // 1*p = 100; // 21. 선언 : p는 주소를 담는 변수다. 타입의 일부2. 사용 : p가 가리키는 그 자리에 100. 역참조 연산 동작 스택과 힙은 다른 동네다 int arr[5]; // 스택 - free 금지, 크기 변경 불가int *p = malloc(5* sizeof(int)); // 힙 - free 필수 int arr[5] 는 컴파일 시점에 크기가 박제되는 거라 나중에 늘릴 수 없다. 크기를 바꾸고 싶으면 처음부터 힙으로 잡아야 한다. malloc 으로 힙에 잡았으면 반드시 free(arr) 로 돌려줘야 한다. 배열을 함수에 넘기면 주소가 간다C 에서 배열 이름은 함수에 넘어갈 때 첫 원소의 주소로 바뀐다. f..

    반응형
Lar
'C' 태그의 글 목록