[C언어]문자열 함수 strlen, strcat, strcmp, strcpy
C언어 문자열 처리 함수
문자열 처리는 어느 언어에서나 중요하죠.
우선 C언어에서 문자열을 처리하려면 string.h를 반드시 포함해야합니다.
※이제부터 설명하는 함수들은 보안적인 취약점이 발견되있는 함수들이 있습니다. 테스트를 해보시기 전에 SDL을 NO로 설정하세요.
Project - [Project Name] Properties - (왼쪽) C/C++ - SDL checks : No
또는 전처리 구문을 사용합니다.
#define _SECURE_CRT_NO_WARNINGS
가장 많이 쓰이는 4개의 함수에 대해서만 우선 알아 보도록 합시다.
● 문자열 길이 size_t strlen(const char *str)
문자열을 input으로 넣어주면 반환되는 문자열의 길이가 나오게 됩니다. NULL문자
까지가 아닌 순수 문자열의 길이를 반환해주게 됩니다.
ex)
char str[20] = "hello, world";
int len = strlen(str);
● 문자열 연결 char* strcat(char *_Destination, const char* _Source)
문자열을 합치게 됩니다. _Destination 뒤에 _Source를 이어주게 됩니다. 주의해야 할 점은 매개변수로 _Destination은 배열로써 그 크기가 지정되어진 문자열이어야 합니다.
ex)
char dst[30]="dst"; //char *dst="dst"; 로 바꾸게 되면 error가 나오게 됩니다.
char src[30]="src";
printf("%s \n", strcat(dst,src));
● 문자열 비교 int strcmp(const char *_Str1, const char *_Str2)
문자열을 비교하게 됩니다.
_Str1이 _Str2보다 사전순으로 나중에 등장하면 1
_Str1이 _Str2보다 사전순으로 먼저 등장하면 -1
_Str1과 _Str2와 사전순이 같다면 0
보통 문자열을 비교할때 이 함수를 사용하는데 두 문자열이 같다면 0이 나오기 때문에 문자열이 같은 지 if문에서 확인하려면 !strcmp(str1,str2)로 확인해야 합니다. 왜냐면 str1,str2가 같다면 0(FALSE)가 반환되기 때문이죠.
● 문자열 복사 char* strcpy(char *_Dest, const char *_Source)
문자열 _Source를 _Dest에 복사합니다. strcat와 마찬가지로 _Dest는 배열의 형태로 넘겨받습니다. _Dest에 _Source문자열을 합치기 때문에 _Dest는 _Source의 문자열을 포함할 만큼 크기가 커야합니다.
ex)
char _dest[20] = "hello,";
char _src[10] = "world";
strcat(_dest, _src);
위 네 가지 함수를 실제로 적용시켜볼까요??
#include<stdio.h>
#include<string.h>
int main() {
char country[32] = "korea";
char south[32] = "south";
char southkorea[32] = "southkorea";
char south_korea[32] = "South Korea";
printf("문자열의 길이 : %d\n", strlen(country));
strcat(south, country);
printf("문자열 결합 : %s\n", south);
printf("문자열 비교 : ");
if (!strcmp(south, southkorea)) {
printf("%s = %s\n", south, southkorea);
}
else {
printf("%s != %s\n", south, southkorea);
}
strcpy(southkorea, south_korea);
printf("문자열 복사 : %s\n", southkorea);
}
그리고 그 결과입니다.
이상으로 문자열과 관련해서 자주쓰이는 함수 몇가지를 살펴보았습니다.