본문 바로가기

C 언어 함수

(14)
qsort 함수 qsort 함수는 C 표준 라이브러리에 포함된 정렬 함수로서,  Quick sort의 'Quick' 이라는 단어에서도 알 수 있듯이 무언가를 빠르게 정렬할 수 있는 알고리즘인데 퀵 소트의 작동 원리는 마치 몇 개의 숫자 카드를 가지고 있고 이를 크기 순으로 정렬하는 것과 같다.  첫 번째 단계에서, 하나의 카드를 뽑아 기준으로 삼는다. (이것이 피벗 즉 기준점이다.)이제 나머지 카드를 기준 카드와 비교한다. 더 작은 카드는 왼쪽에, 더 큰 카드는 오른쪽에 놓는다. 왼쪽과 오른쪽에 있는 카드들 역시 같은 방법으로 다시 정렬하는데, 이 과정을 계속 반복하면, 모든 카드가 크기 순서대로 정렬된다. qsort 함수의 선언: qsort 함수는 헤더 파일에 선언되어 있고 함수 원형은 다음과 같다.void qsor..
특정 길이의 문자열을 비교하는 strncmp 함수 strncmp 함수는 #include 에 포함되어 있는 함수로, 두 문자열의 처음 n개의 문자를 비교하는 데 사용된다. 이 함수는 문자열 비교 시 메모리의 한계를 지정할 수 있어, 특정 길이까지 문자열을 비교해야 하는 경우 유용하다. strcmp는 문자열 전체를 비교하는데 사용되는 반면, strncmp는 부분 문자열도 비교할 수 있다. 함수 원형#include int strncmp(비교 문자열1, 비교 문자열2, 비교할 문자열 크기); 예제 코드 아래 예제 코드는 두 문자열을 정해진 길이만큼 비교하는 코드이다. #include #include // 문자열이 특정 접두사로 시작하는지 확인하는 함수int solution(const char* my_string, const char* is_prefix) { ..
memmove 함수 memmove 함수는 메모리 블록을 다른 위치로 복사할 때 사용되며, memcpy와 유사하지만 중첩된 메모리 영역에서도 안전하게 사용할 수 있다는 특징이 있다.1. memmove 함수의 정의memmove 함수는 헤더 파일에 정의되어 있으며, 원형은 다음과 같다. void *memmove(void *목적지 포인터, const void *원본 포인터, size_t 복사할 바이트 수);2. 기능과 특성memmove 함수는 원본 포인터에서 목적지 포인터로 n바이트 만큼의 데이터를 복사한다.가장 중요한 특징은 소스(src)와 목적지(dest)가 겹치는 경우에도 올바르게 데이터를 복사한다는 점이다. 이는 내부적으로 복사할 데이터를 임시 버퍼에 저장한 후, 목적지로 이동시키기 때문에 발생한다. 이러한 특징 때문에 ..
isdigit 함수로 정수인지 찾아내기 isdigit() 함수는 C 언어에서 문자가 숫자(0부터 9까지)인지 아닌지를 검사하는 표준 라이브러리 함수이다.이 함수는 헤더 파일에 정의되어 있으며, 문자가 숫자일 경우 참(true)을 반환하고, 그렇지 않을 경우 거짓(false)을 반환한다.  isdigit() 함수는 ASCII 코드값을 기반으로 판단하는데 ASCII 코드가 48('0')에서 57('9') 사이에 있을 때 숫자로 간주하는 방식으로 동작한다. 예시 코드#include int main() { char ch = '5'; if (isdigit(ch)) { printf("%c는 숫자입니다.\n", ch); } else { printf("%c는 숫자가 아닙니다.\n", ch); } retu..
strtok를 연속 호출하면 인자에 NULL을 넣는다. strtok 함수는 문자열을 특정 구분자(이 경우 공백 " ")로 분리하는 데 사용되며, 토큰화 작업을 수행하고 저장까지 한다.. strtok을 처음 호출할 때는 대상 문자열을 직접 지정해 주어야 하지만, 이후 같은 문자열에서 계속해서 토큰을 추출할 때는 문자열 파라미터 자리에 NULL을 지정한다. 이것이 가능한 이유는 strtok 함수가 내부적으로 현재 위치를 기억하기 때문이다.strtok의 동작 방식초기 호출: strtok은 첫 호출 시에 두 개의 인자를 받는다. 첫 번째 인자는 분리할 원본 문자열이고, 두 번째 인자는 구분자이다.. 함수는 문자열의 시작부터 구분자를 찾고, 구분자 위치에 널 문자('\0')를 끼워 넣어 문자열을 분리한다. 첫 번째 토큰 이후의 문자열의 나머지 부분을 내부적으로 저장한..
strcpy와 strdup 차이 strcpy와 strdup은 둘 다 C 언어에서 문자열을 다룰 때 사용되는 함수이이다. 하지만 문자열을 복사할 때와 메모리를 할당할 때 그 기능에서 차이가 있다.strcpy 함수strcpy는 C 표준 라이브러리의 일부로, 한 문자열을 다른 문자열로 복사하는 데 사용된다. 이 함수는 목적지 버퍼에 충분한 공간이 확보되어 있어야 하며, 개발자가 메모리 관리를 직접 해야 한다. char *strcpy(char *dest, const char *src);dest: 복사할 문자열을 받을 대상 버퍼의 포인터이다. 이 버퍼는 충분한 크기로 미리 할당되어 있어야 한다.src: 복사할 원본 문자열의 포인터이다. 예제char source[] = "Hello, world!";char destination[20]; // 충..
동적 할당 시 값 초기화 memset 함수 memset 함수를 사용하면 배열이나 구조체 같은 데이터 구조의 초기화를 간단하고 빠르게 수행할 수 있습니다. 예를 들어, 정수 배열을 0으로 초기화하거나, 문자 배열에 특정 문자를 채울 때 유용하다. C 언어의 표준 라이브러리인 에 정의되어 있다. void *memset(void *s, int c, size_t n);s: 초기화할 메모리의 시작 주소 c: 메모리에 설정할 값 (int형으로 전달되지만, 실제로는 unsigned char로 변환되어 메모리에 저장됨n: 초기화할 바이트 수  예제 1: 정수 배열 초기화#include #include int main() { int numbers[10]; memset(numbers, 0, sizeof(numbers)); for (int i = 0..
sqrt 함수 C언어에서 루트를 계산할 때 사용하는 sqrt 함수는 헤더 파일에 정의되어 있다. sqrt 함수를 사용하기 위해 먼저 헤더 파일을 포함해야 한다. 또한 sqrt() 함수는 double sqrt(double x);로 정의되어 있다. 이 함수는 인자로 double 타입의 값을 받고, 계산된 제곱근 역시 double 타입으로 반환한다. 예제 코드 #include #include int main() { double number = 25.0; // 제곱근을 구하고자 하는 수 double result; // 계산된 제곱근을 저장할 변수 result = sqrt(number); // sqrt 함수를 호출하여 제곱근 계산 printf("The square root of %.2f is %.2f\n", number, re..