strcmp() 함수의 헤더 파일
#include <string.h>
strcmp() 함수의 원형
int strncmp ( const char * str1, const char * str2, size_t num);
Parameter
str1
비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.
str2
비교할 두번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있다.
num
복사할 데이터의 byte 수이며 size_t 형으로 전달해주면 된다.
리턴 값
세 가지 형태로 리턴됩니다.
1. str1기 str2보다 클 경우 => 0보다 큰 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 큰 경우)
2. str1이 str2보다 작은 경우 => 0보다 작은 값을 리턴
(첫 번째 인자의 문자가 두 번째 인자의 문자보다 작은 경우)
3. str1과 str2가 같을 경우 => 0을 리턴
(첫번째 인자와 두 번째 인자의 문자가 모두 같을 경우)
※자세한 사항은 아래에 기재되어 있어요※
strcnmp() 함수는 다들 아시다시피 문자열 비교 함수입니다.
str1이 가리키는 메모리 역역과 str2 메모리 영역을 num byte 만큼 비교해주는 함수이죠!!
(strcmp() 함수가 궁금하다면?)
[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기)
strcmp() 함수의 헤더 파일 #include strcmp() 함수의 원형 int strcmp(const char * str1, const char * str2); Parameter str1 비교할 첫 번째 메모리 블록의 주소를 인자로 받으며 const char * 형으로 되어 있..
idsn.tistory.com
Θ strcmp() 함수는 어떻게 동작하는 걸까요?
위에서 설명드렸다시피 strcmp() 함수는 str1, str2문자열에서 num byte 만큼 비교하여 어느 문자열이 큰지 작은지를 알려줍니다.
Note, 여기서 중요한 점은 문자열은 어떻게 비교할까요?
문자열은 여러 문자로 되어 있는 집합입니다.
하나의 문자들이 모여서 문자열을 이루고 있어요.
하지만 컴퓨터는 0 과 1만 알기 때문에 문자도 모두 숫자로 기억해요.
이를 문자인코딩이라고 하는데 문자 인코딩 방식에는 여러가지 방법이 있어요.
ASCII, ANSI, Unicode, Percent 인코딩 등이 있는데 통상적으로 ASCII을 많이 사용하고
c언어에서 사용하는 문자들은 ASCII으로 인코딩되어 있어요.
즉, 각각의 문자마다 대응되는 숫자를 하나씩 비교하여 어느값이 큰지 작은지 비교하는 게 strcmp, strncmp 함수합니다.
HELLO 문자와 HELIX 문자는 1 ~ 3 byte 까지는 동일하지만 4byte 문자에서 다른 값이 발생해요.
HELLO에서는 'L' 문자로 되어 있고 ASCII 방식으로는 0x4C 이예요.
HELIX 에서는 'I' 문자로 되어 있고 ASCII 방식으로는 0x49 예요.
그럼 문자 'L' 과 'I' 를 비교하면 문자 'L' 이 더 크겠죠!!
결과적으로 strncmp() 함수의 리턴값이 0보다 큰 값이 나옵니다.
자 이제 실제 코드를 확인해보죠!
위에 예시처럼 HELLO 문자열과 HELIX 문자열을 비교해보겠습니다.
#include <stdio.h>
#include <string.h>
int main(){
char str1[20] = "HELLO";
char str2[20] = "HELIX";
char str3[20] = "HELLO";
char *p;
int ret = 0;
ret = strcmp(str1, str2);
printf("/%s/ > /%s/ : %d\r\n", str1, str2, ret);
ret = strcmp(str2, str1);
printf("/%s/ < /%s/ : %d\r\n", str3, str2, ret);
ret = strcmp(str1, str3);
printf("/%s/ = /%s/ : %d\r\n", str3, str2, ret);
return 0;
}
실행 결과
다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!
[C언어] String.h 헤더 파일 분석하기(String.h 함수 모음, C언어 래퍼런스)
c언어를 사용하시거나 해보셨던 분들은 대부분 memcpy, memset 함수를 사용해보셨을 텐데요. 해당 함수를 사용하기 위해서는 String.h 파일을 포함시켜줬던 기억이 나실겁니다. 요렇게요 #include #include
idsn.tistory.com
'C 언어 > C 언어 리이브러리 함수' 카테고리의 다른 글
[C언어] String.h 라이브러리 함수 - memchr() 함수 파헤치기 (0) | 2021.04.20 |
---|---|
[C언어] String.h 라이브러리 함수 - strxfrm() 함수 파헤치기(문자열 복사, 문자열 길이 구하기) (0) | 2021.04.01 |
[C언어] String.h 라이브러리 함수 - strcoll() 함수 파헤치기(문자열 비교, 같은 문자열 찾기) (0) | 2021.03.17 |
[C언어] String.h 라이브러리 함수 - strcmp() 함수 파헤치기(문자열을 비교, 같은 문자열 찾기) (0) | 2021.02.14 |
[C언어] String.h 라이브러리 함수 - memcmp() 함수 파헤치기(문자열을 비교해보자, 같은 문자열 찾기) (0) | 2021.02.09 |