Stdlib.h

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

`stdlib.h`는 C 표준 라이브러리의 헤더 파일로, 다양한 유틸리티 함수들을 정의한다. 이 헤더 파일은 문자열 변환, 의사 난수 생성, 동적 메모리 관리, 프로세스 제어, 검색 및 정렬, 정수 산술 등 다양한 기능을 제공한다. 주요 함수로는 문자열을 정수, long, double 형으로 변환하는 `atoi`, `atol`, `atof`, `strtol`, `strtoul`, `strtod` 등이 있으며, 의사 난수를 생성하는 `rand`와 `srand`, 동적 메모리를 할당하고 해제하는 `malloc`, `calloc`, `realloc`, `free` 등이 있다. 또한 프로세스 제어 함수인 `abort`, `atexit`, `exit`, `getenv`, `system`과 검색 및 정렬 함수 `bsearch`, `qsort` 등이 포함되어 있다. 마지막으로 정수의 절댓값을 구하는 `abs`, `labs` 와 정수 나눗셈을 수행하는 `div`, `ldiv` 함수를 제공한다.

Stdlib.h
개요
헤더 파일stdlib.h
표준C 표준 라이브러리
설명일반적인 유틸리티 함수를 정의한다.
숫자 변환, 동적 메모리 할당, 난수 생성, 정렬, 검색에 관련된 함수를 포함한다.
매크로
EXIT_FAILURE실패 종료 코드
EXIT_SUCCESS성공 종료 코드
MB_CUR_MAX현재 로캘의 멀티바이트 문자에서 최대 바이트 수
NULL널 포인터 상수
RAND_MAXrand 함수에 의해 반환되는 최대값
자료형
div_tdiv 함수에 의해 반환되는 구조체
ldiv_tldiv 함수에 의해 반환되는 구조체
lldiv_tlldiv 함수에 의해 반환되는 구조체
size_tsizeof 연산자의 결과 자료형
wchar_t와이드 문자 자료형
함수
수치 변환atof: 문자열을 double형으로 변환
atoi: 문자열을 int형으로 변환
atol: 문자열을 long형으로 변환
atoll: 문자열을 long long형으로 변환
strtod: 문자열을 double형으로 변환
strtof: 문자열을 float형으로 변환
strtold: 문자열을 long double형으로 변환
strtol: 문자열을 long형으로 변환
strtoll: 문자열을 long long형으로 변환
strtoul: 문자열을 unsigned long형으로 변환
strtoull: 문자열을 unsigned long long형으로 변환
난수 생성rand: 난수 생성
srand: 난수 생성기 시드 설정
메모리 관리calloc: 메모리 할당 및 초기화
free: 메모리 해제
malloc: 메모리 할당
realloc: 메모리 재할당
환경abort: 비정상적인 프로그램 종료
atexit: 프로그램 종료 시 호출될 함수 등록
exit: 프로그램 종료
getenv: 환경 변수 값 가져오기
system: 시스템 명령 실행
검색 및 정렬bsearch: 이진 검색
qsort: 배열 정렬
정수 연산abs: 정수의 절대값
div: 정수 나눗셈
labs: long형 정수의 절대값
ldiv: long형 정수 나눗셈
llabs: long long형 정수의 절대값
lldiv: long long형 정수 나눗셈
멀티바이트 문자mblen: 멀티바이트 문자 길이 얻기
mbtowc: 멀티바이트 문자를 와이드 문자로 변환
wctomb: 와이드 문자를 멀티바이트 문자로 변환
mbstowcs: 멀티바이트 문자열을 와이드 문자열로 변환
wcstombs: 와이드 문자열을 멀티바이트 문자열로 변환
📚 더 읽어볼만한 페이지
  • C 표준 라이브러리 헤더 - Errno.h
    errno.h는 POSIX 표준 오류 값과 추가 매크로를 정의하며, GNU C 라이브러리는 strerror 함수를 통해 각 오류에 대한 설명을 제공한다.
  • C 표준 라이브러리 헤더 - Stdio.h
    `stdio.h`는 C 프로그래밍 언어의 표준 입출력 라이브러리 헤더 파일로, 파일 조작 및 콘솔 입출력 함수, `EOF`, `NULL` 등의 상수, `stdin`, `stdout`, `stderr` 같은 표준 스트림 변수, 그리고 `FILE` 형식을 제공하며, `gets()` 함수와 같은 보안 취약점에 대한 주의가 필요하다.

2. 문자열 변환

`stdlib.h`에는 문자열을 다른 데이터 타입으로 변환하는 여러 함수들이 포함되어 있다. 이 함수들을 이용하면 문자열 형식의 숫자를 정수나 실수로 쉽게 바꿀 수 있다.

👆
좌우로 밀어서 보기
함수설명
`int atoi ( const char * str );`문자열 `str`을 `int` 형으로 변환한다.
`long int atol ( const char * str );`문자열 `str`을 `long` 형으로 변환한다.
`double atof ( const char * str );`문자열 `str`을 `double` 형으로 변환한다.
`long int strtol ( const char * str, char endptr, int base );`문자열 `str`을 `base` 진법으로 해석하여 `long int` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.
`unsigned long int strtoul ( const char * str, char endptr, int base );`문자열 `str`을 `base` 진법으로 해석하여 `unsigned long int` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.
`double strtod ( const char * str, char ** endptr );`문자열 `str`을 `double` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.


`atoi`, `atol`, `atof`는 각각 문자열을 정수, 긴 정수, 실수로 변환하는 간단한 함수들이다.

`strtol`, `strtoul`, `strtod`는 더 정교한 변환을 제공한다. 이 함수들은 지정된 진법(`base`)에 따라 문자열을 해석하고, 변환 과정에서 숫자가 아닌 문자를 만났을 때 그 위치를 `endptr`로 알려준다.

2.1. `atoi`, `atol`, `atof`

wikitext

👆
좌우로 밀어서 보기
함수설명
`int atoi ( const char * str );`문자열 `str`을 `int` 형으로 변환한다.
`long int atol ( const char * str );`문자열 `str`을 `long` 형으로 변환한다.
`double atof ( const char * str );`문자열 `str`을 `double` 형으로 변환한다.

2.2. `strtol`, `strtoul`, `strtod`

`strtol` 함수는 문자열 `str`을 `base` 진법으로 해석하여 `long int` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.

`strtoul` 함수는 문자열 `str`을 `base` 진법으로 해석하여 `unsigned long int` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.

`strtod` 함수는 문자열 `str`을 `double` 형으로 변환한다. `endptr`이 `NULL`이 아니면, 변환 후 남은 첫 번째 문자 위치를 `endptr`에 저장한다.

3. 의사 난수 생성

``에서 의사 난수를 생성하는 함수는 다음과 같다.

👆
좌우로 밀어서 보기
함수설명
int rand ( void );0부터 `RAND_MAX` 사이의 의사 난수를 반환한다. 더 자세한 내용은 `rand` 섹션 참고
void srand ( unsigned int seed );의사 난수 발생기를 `seed` 값으로 초기화한다. 보통 `time(NULL)`을 사용해 초기화한다. 더 자세한 내용은 `srand` 섹션 참고

3.1. `rand`

0부터 `RAND_MAX` 사이의 의사 난수를 반환한다.

3.2. `srand`

의사 난수 발생기를 초기화한다. 일반적으로 `time(NULL)`을 사용하여 초기화한다.

```c
void srand ( unsigned int seed );
```

`srand` 함수는 `seed` 값을 기반으로 의사 난수 발생기를 초기화한다. 보통 `seed`는 `time(NULL)`로 설정된다. `time(NULL)`은 현재 시간을 나타내는 정수 값을 반환하므로, 프로그램을 실행할 때마다 다른 `seed` 값을 가지게 되어 매번 다른 난수열을 생성할 수 있게 된다. `rand` 함수를 사용하여 난수를 생성하기 전에 `srand` 함수를 호출하여 난수 발생기를 초기화하는 것이 일반적이다.

4. 동적 메모리 관리

`malloc`, `calloc`, `realloc` 함수는 힙(heap)에서 메모리를 할당하고, `free` 함수는 할당된 메모리를 해제한다. 각 함수에 대한 더 자세한 내용은 하위 문서를 참고하라.

👆
좌우로 밀어서 보기
함수설명
void * malloc ( size_t size );size 바이트의 메모리를 힙에서 할당하여 반환한다.
void * calloc ( size_t num, size_t size );(num * size) 바이트의 메모리를 힙에서 할당하여 반환한다.
void * realloc ( void * ptr, size_t size );ptr이 가리키는 메모리를 size 바이트만큼 힙에서 재할당하여 반환한다.
void free ( void * ptr );ptr이 가리키는 메모리를 해제한다. (할당했으면 반드시 해제해야 한다.)

4.1. `malloc`, `calloc`, `realloc`

`malloc` 함수는 size 바이트의 메모리를 힙에서 할당하여 반환한다. `calloc` 함수는 (num * size) 바이트의 메모리를 힙에서 할당하여 반환한다. `realloc` 함수는 ptr이 가리키는 메모리를 size 바이트만큼 힙에서 재할당하여 반환한다.

4.2. `free`

`free` 함수는 `ptr`이 가리키는 메모리를 해제한다. 이 메모리는 `malloc`, `calloc`, `realloc` 함수로 힙에서 동적으로 할당된 것이어야 한다. 할당된 메모리는 사용 후 반드시 `free` 함수로 해제해야 한다.

```

👆
좌우로 밀어서 보기
함수설명
void free ( void * ptr );ptr이 가리키는 메모리를 해제한다.(할당했으면 반드시 해제해야 한다.)

5. 프로세스 제어

`stdlib.h`에 정의된 프로세스 제어 함수들은 프로그램의 실행 흐름을 제어하는 데 사용된다. 각 함수들은 특정한 상황에서 프로세스를 종료하거나, 종료 시 특정 동작을 수행하도록 설정하거나, 외부 명령을 실행하는 등의 기능을 제공한다.

👆
좌우로 밀어서 보기
프로세스 제어 함수
함수설명
`void` abort `( void );`현재 프로세스를 비정상적으로 종료한다.
`int` atexit `( void ( * function ) (void) );`프로세스가 정상적으로 종료될 때 실행할 함수를 지정한다.
`void` exit `( int status );`현재 프로세스를 정상적으로 종료한다. `status`는 부모 프로세스에게 전달된다.
`char *` getenv `( const char * name );``name`에 해당하는 환경 변수를 반환한다.
`int` system `( const char * command );``command`에 해당하는 시스템 명령을 실행한다.

5.1. `abort`

현재 프로세스를 비정상적으로 종료한다.

5.2. `atexit`

`atexit` 함수는 프로세스가 정상적으로 종료될 때 실행할 함수를 등록한다. 함수 원형은 다음과 같다.

```c
int atexit ( void ( * function ) (void) );
```

`function`은 종료 시 호출될 함수를 가리키는 포인터이다.

5.3. `exit`

void exit ( int status )
: 현재 프로세스를 정상적으로 종료한다. `status` 값은 부모 프로세스에게 전달된다.

5.4. `getenv`

cpp
char * getenv ( const char * name );
```
`name`에 해당하는 환경 변수를 반환한다.

getenv영어 함수는 C 표준 라이브러리 함수 중 하나로, 지정된 환경 변수의 값을 가져오는 데 사용된다. 이 함수는 `stdlib.h` 헤더 파일에 정의되어 있다.

함수의 원형은 다음과 같다.
```cpp
char * getenv ( const char * name );
```
* `name`: 값을 가져올 환경 변수의 이름을 나타내는 문자열이다.

`getenv` 함수는 지정된 환경 변수가 존재하면 해당 값을 가리키는 문자열 포인터를 반환한다. 만약 지정된 환경 변수가 존재하지 않으면, 널 포인터(NULL)를 반환한다. 반환된 문자열은 정적 메모리 영역에 저장되므로, 복사해서 사용해야 한다.

예를 들어, "PATH" 환경 변수의 값을 가져오려면 다음과 같이 코드를 작성할 수 있다.
```cpp
#include // getenv 함수를 사용하기 위한 헤더 파일
#include // printf 함수를 사용하기 위한 헤더 파일

int main() {
char *path = getenv("PATH"); // PATH 환경 변수의 값을 가져온다.
if (path != NULL) { // 환경 변수가 존재하는 경우
printf("PATH: %s\n", path); // PATH 환경 변수의 값을 출력
} else { // 환경 변수가 존재하지 않는 경우
printf("PATH 환경 변수가 설정되지 않았습니다.\n");
}
return 0;
}
```
이 코드는 "PATH" 환경 변수의 값을 가져와서, 존재하면 그 값을 출력하고, 존재하지 않으면 "PATH 환경 변수가 설정되지 않았습니다."를 출력한다.

5.5. `system`

`system` 함수는 `command`에 지정된 시스템 명령어를 실행한다.

6. 검색/정렬

`stdlib.h`에는 배열에서 특정 값을 검색하거나 정렬하는 데 사용되는 함수들이 있다.

* `bsearch`: 이진 검색을 수행한다.
* `qsort`: 퀵 정렬 알고리즘을 사용하여 정렬한다.

6.1. `bsearch`

이진 검색을 수행한다.

6.2. `qsort`

퀵 정렬 알고리즘을 사용하여 정렬한다.

```cpp
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

7. 정수 산술

`abs`, `labs` 함수는 정수의 절댓값을 계산하고, `div`, `ldiv` 함수는 정수 나눗셈의 몫과 나머지를 계산하는 데 사용된다. 이 함수들은 `` 헤더 파일에 정의되어 있다.

`div`와 `ldiv`는 몫과 나머지를 계산하여 `div_t` 또는 `ldiv_t` 구조체에 저장하여 반환한다. `div_t` 구조체는 `quot` (몫)와 `rem` (나머지) 멤버를 가진다.

7.1. `abs`, `labs`

`abs`와 `labs`는 정수의 절댓값을 반환하는 함수이다.

👆
좌우로 밀어서 보기
함수설명
int abs ( int n );
long int labs ( long int n );
n의 절댓값을 반환한다.

7.2. `div`, `ldiv`

`div`와 `ldiv`는 정수 나눗셈의 몫과 나머지를 반환하는 함수이다. `div`는 `int`형, `ldiv`는 `long`형 정수에 대해 나눗셈을 수행한다. 함수의 결과는 `div_t` (또는 `ldiv_t`) 구조체에 저장되며, 이 구조체의 `quot` 멤버는 몫, `rem` 멤버는 나머지를 나타낸다.

```cpp
div_t div (int numerator, int denominator);
ldiv_t ldiv (long numerator, long denominator);
```

예를 들어 `div(10, 3)`을 호출하면, `quot` 값은 3, `rem` 값은 1인 `div_t` 구조체가 반환된다.