- cstdlib / C++ 표준 라이브러리
- 1. malloc / free – 동적 메모리 할당 및 할당 해제에 사용됩니다
- 2. rand / srand – 난수를 생성하는 데 사용됩니다
- 3. exit – 프로그램 종료
- 4. atoi – 문자열을 정수로 변환하는 데 사용됩니다
- 5. atof – 문자열을 부동 소수점 번호로 변환하는 경우
- 6. strtol / strtoll – Long 및 Long Long Integer 로 변환
- strtoul / strtoull – 부호없는 Long 및 부호없는 Long Long Integer로 변환
- 7. system – 시스템 명령을 실행합니다
- 8. abort – 비정상적인 프로그램 종료를 강제합니다
- 9. qsort – 배열을 정렬합니다
cstdlib / C++ 표준 라이브러리
https://learn.microsoft.com/ko-kr/cpp/standard-library/cstdlib?view=msvc-170
cstdlib은 C++ 표준 라이브러리에 있는 라이브러리로
동적 메모리 관리, 난수 생성, 문자열을 숫자 값으로 변환하는 등의 일반적인 기능을 수행하기 위한 일련의 기능을 제공합니다.
라이브러리는 C++ 표준 라이브러리의 일부이며 cstdlib 헤더 파일에 정의되어 있습니다.
다양한 프로그래밍 컨텍스트에서 공통적이고 유용한 유틸리티 기능과 매크로 세트를 제공합니다.
cstdlib 라이브러리는 메모리 할당 및 프로세스 제어와 같은 낮은 수준의 작업을 수행하는 데 특히 유용합니다.
(cstdlib에서 가장 일반적으로 사용되는 함수)
malloc / free – 동적 메모리 할당 및 할당 해제에 사용됩니다
rand / srand – 난수를 생성하는 데 사용됩니다
exit – 프로그램 종료
atoi – 문자열을 정수로 변환하는 데 사용됩니다
atof – 문자열을 부동 소수점 번호로 변환하는 경우
strtol / strtoul – 문자열을 긴 또는 부호 없는 긴 정수로 변환하는 데 사용됩니다
system – 시스템 명령을 실행합니다
abort – 비정상적인 프로그램 종료를 강제합니다
qsort – 배열을 정렬합니다
예제
1. malloc / free – 동적 메모리 할당 및 할당 해제에 사용됩니다
#include <iostream> #include <cstdlib> int main() { int n; std::cout << "할당할 정수 수 입력 : "; std::cin >> n; // 동적으로 메모리를 할당할때 Heap(힙)영역에 할당 // 성공 : 할당한 메모리의 첫번째 주소 리턴 // 실패 : NULL 리턴 int* p = static_cast<int*>(malloc(n * sizeof(int))); // n개의 정수에 메모리 할당 if (p == nullptr) { // NULL이 return되면 => 할당 실패 std::cerr << "오류: 메모리를 할당할 수 없습니다 " << std::endl; return 1; } for (int i = 0; i < n; i++) { p[i] = i; } std::cout << "할당된 메모리에 다음 값이 포함되어 있습니다 : "; for (int i = 0; i < n; i++) { std::cout << p[i] << ' '; } std::cout << std::endl; // 메모리 할당 해제 // 해제 안하면 메모리 릭, 메모리 누수가 발생 free(p); return 0; }
2. rand / srand – 난수를 생성하는 데 사용됩니다
#include <iostream> #include <cstdlib> #include <ctime> int main() { srand(time(nullptr)); // 현재 시간 seed로 난수 생성 //srand(time(NULL)); std::cout << rand() << std::endl; std::cout << rand() << std::endl; std::cout << rand() << std::endl; std::cout << rand() << std::endl; std::cout << rand() << std::endl; for (int i = 0; i < 10; i++) { int randomNumber = rand() % 100; // 0과 99 사이의 난수 생성 std::cout << randomNumber << std::endl; } return 0; }
3. exit – 프로그램 종료
#include <iostream> #include <cstdlib> int main() { std::cout << "Exiting program" << std::endl; // 프로그램 종료 std::exit(0); // 종료되어서 안나온다. std::cout << "Do something!!"; return 0; }
4. atoi – 문자열을 정수로 변환하는 데 사용됩니다
#include <iostream> #include <cstdlib> int main() { std::string str; std::cin >> str; // 변환이 불가능 하다면 0 return int num = std::atoi(str.c_str()); std::cout << num << std::endl; return 0; }
5. atof – 문자열을 부동 소수점 번호로 변환하는 경우
#include <iostream> #include <cstdlib> int main() { std::string str; std::cin >> str; // atof() 함수는 입력 문자를 숫자로 해석하여 생성되는 double 값을 리턴합니다. // 함수가 입력을 해당 유형의 값으로 변환할 수 없는 경우 리턴값은 0입니다. // 오버플로의 경우, 함수는 errno를 ERANGE로 설정하고 값 -HUGE_VAL 또는 +HUGE_VAL을 리턴합니다. // 변환이 불가능 하다면 0 return float num = std::atof(str.c_str()); std::cout << num << std::endl; return 0; }
6. strtol / strtoll – Long 및 Long Long Integer 로 변환
strtoul / strtoull – 부호없는 Long 및 부호없는 Long Long Integer로 변환
모두 같은 방법으로 사용
#include <iostream> #include <cstdlib> #include <errno.h> int main() { // // ststol, strtoul, strtof, strtoll 사용법이 같다. // // 이 예제에서는 strtoll 함수를 사용하여 문자열 "123456789"를 long long int로 변환합니다. // 변환 결과는 num 변수에 저장된 다음 표준 출력으로 인쇄됩니다. // // strtoll 함수는 // 변환할 문자열, 문자열에 잘못된 첫 번째 문자의 주소를 저장할 문자에 대한 포인터, // 숫자 표현의 기저(10진수의 경우 10진수)의 세 가지 인수를 사용합니다. // // 변환이 실패하면 endptr 변수가 첫 번째 잘못된 문자를 가리키고 // num 변수에 유효한 숫자 표현이 포함되지 않습니다. // 변환이 성공했는지 확인하기 위해 *endptr이 문자열의 끝을 나타내는 '\0'과 같은지 확인할 수 있습니다. const char* str = "123456789"; char* endptr; long long num = strtoll(str, &endptr, 10); if (*endptr != '\0') { std::cerr << "Conversion failed: non-digit characters present" << std::endl; } else { std::cout << "The string " << str << " converted to a long long int is " << num << std::endl; } return 0; }
7. system – 시스템 명령을 실행합니다
#include <iostream> #include <cstdlib> int main() { // 문자열 "Hello World"를 표준 출력으로 인쇄하는 명령인 // "echo Hello World" 인수로 호출 // 시스템 메서드는 실행된 명령의 상태 코드를 반환 // 0 성공 int result = system("echo Hello World"); std::cout << "The result of the system call is: " << result << std::endl << std::endl; result = system("wrong Hello World"); // 1 실패 std::cout << "The result of the system call is: " << result << std::endl; return 0; }
8. abort – 비정상적인 프로그램 종료를 강제합니다
#include <iostream> #include <cstdlib> int main() { // 비정상적인 프로그램 종료 std::cout << "Aborting program" << std::endl; std::abort(); return 0; }
9. qsort – 배열을 정렬합니다
#include <iostream> #include <cstdlib> // qsort 함수는 정수 배열을 정렬하는 데 사용됩니다. // qsort 함수는 배열의 첫 번째 요소에 대한 포인터, 배열의 요소 수, 배열의 각 요소의 크기, // 두 요소의 순서에 따라 0보다 작거나 같거나 큰 값을 반환하는 비교 함수의 네 가지 인수를 사용합니다. // 비교 함수 비교는 배열의 요소에 대한 포인터인 두 개의 인수를 사용하고 두 포인터가 가리키는 값의 차이를 반환합니다. // qsort 함수는 배열이 정렬될 때까지 순서가 잘못된 요소를 반복적으로 스왑하여 배열의 요소를 정렬합니다. // 정렬 후 정렬된 배열이 표준 출력으로 인쇄됩니다 /* compare 함수는 cstdlib 라이브러리의 qsort 함수가 요소 배열을 정렬하는 데 사용하는 비교 함수입니다. compare 함수는 두 개의 인수를 사용하며, 각 인수는 배열의 요소에 대한 포인터입니다 */ int compare(const void* a, const void* b) { int numA = *(int*)a; int numB = *(int*)b; return (numA - numB); } /* 비교 함수는 두 정수를 비교합니다. 먼저 각 인수를 int에 대한 포인터에 캐스팅한 다음 포인터를 역참조하여 정수의 값을 얻습니다. 그런 다음 두 정수의 차이를 반환합니다. 비교 함수의 반환 값은 비교 중인 두 요소의 순서를 결정합니다. 반환 값이 0보다 작으면 첫 번째 요소는 두 번째 요소보다 작은 것으로 간주됩니다. 반환 값이 0이면 첫 번째 요소는 두 번째 요소와 동일한 것으로 간주됩니다. 반환 값이 0보다 크면 첫 번째 요소가 두 번째 요소보다 큰 것으로 간주됩니다. qsort 함수는 비교 함수를 사용하여 배열이 정렬될 때까지 순서가 잘못된 요소를 반복적으로 스왑하여 배열의 요소를 정렬합니다. */ int main() { int numbers[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 }; int size = sizeof(numbers) / sizeof(numbers[0]); qsort(numbers, size, sizeof(int), compare); std::cout << "Sorted array: "; for (int i = 0; i < size; i++) { std::cout << numbers[i] << " "; } std::cout << std::endl; return 0; }