[C언어] 데이터 영역(Data Area), 스택 영역(Stack Area), 힙 영역(Heap Area)

데이터 영역(Data Area)


전역변수, static 변수.


프로그램 시작과 동시에 할당.

프로그램 종료되어야만 메모리에서 소멸.

전역변수가 데이터 영역에 올라가는 일은 main 함수의 호출보다 먼저 진행된다.





스택 영역(Stack Area)


지역변수, 매개변수.




힙 영역(Heap Area)


프로그래머가 관리하는 메모리 영역.

배열의 크기 선언을 반드시 상수로 사용해야 하는 이유



스택, 데이터 영역에 할당될 메모리의 크기는 런타임(run-time)이 아닌 컴파일되는 동안(컴파일 타임)에 결정되어야 한다.



힙에 메모리를 할당하는 것을 두고 '동적 할당(Dynamic Allocation)'이라 한다.

반대로 스택과 데이터 영역에 메모리를 할당하는것 '정적 할당(Static Allocation)이라 한다.




malloc 함수 & free 함수.


malloc 함수.

동적으로 메모리를 할당하는 함수이다. = 힙 영역에 메모리를 할당하는 함수.

할당한 메모리의 주소(첫번째 바이트의 주소)를 리턴한다.

만약에 메모리 부족으로 인해서 메모리 할당에 실패했다면, NULL 포인터가 리턴되므로, 리턴된 포인터가 NULL인지 아닌지 확인해야한다.










[C언어] strlen, strcpy, strncpy, strcat, strncat, strcmp, strncmp

1. strlen 함수


문자열의 길이를 반환해 주는 함수이다. NULL 문자는 문자열 길이에 포함되지 않는다.




2. strcpy 함수


문자열을 복사. BUT. 저장할 버퍼가 입력받은 문자열 길이보다 작으면 오버플로우 발생.

따라서 strncpy함수를 선호한다.


3. strncpy 함수


최대 길이 n을 넘지 않고 문자열을 복사한다.


strncpy로 NULL문자를 뺀 길이까지만 복사하고, 맨 뒤에 '\0'(NULL) 을 넣어준다.



4. strcat 함수, strncat 함수

기존에 존재하는 문자열의 뒤에다가 다른 문자열을 추가하는(덧붙이는) 함수이다.
역시나 strcat은  문자열이 저장될 배열의 공간이 추가하는 문자열의 길이에 비해 충분하지 못한 경우 오버플로우 발생.

strncat함수를 쓰자.



5. strcmp 함수, strncmp함수


문자열의 길이를 비교하는 것 X. 문자열 내용 자체를 비교 O.




위에 예제는 str1 == str2 (배열 이름 = 포인터) 이므로 포인터를 비교한 것임.

 



strcmp 함수예제


strncmp함수는 처음부터 n까지 비교하는 함수이다.