C언어
[C] <string.h>의 문자열 처리 함수
Jawy
2024. 2. 19. 22:20
코딩을 하다보면 상당히 많이 사용하게 되는 문자열 처리 함수들이 포함된 헤더파일
<string.h>에 대해 정리를 해보려 한다.
strlen
- string + length → strlen
- 문자열의 길이를 반환해주는 함수이다.
- 이때 널문자 '\0' 전까지의 길이가 문자열의 길이다.
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(){
5 char test[10] = "Hello";
6
7 printf("%d\n", (int)strlen(test));
8 return 0;
9 }
- 위 코드에서와 같이 strlen 함수는 하나의 매개 인자를 받고, 그것은 문자열 배열의 시작 주소값일 것이다.
- strlen 함수 앞에 int 형태로 형변환을 해주는 이유는, strlen의 반환 값이 size_t, 혹은 long unsigned int여서 %d로 출력이 안 되기 때문이다. ※ %d 출력으로 통일하는 것이 편해서 형변환 해주는 방식을 택했다.
strcpy
- string + copy
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(){
5 char test[10] = "Hello";
6 char* copy;
7
8 printf("%s\n", strcpy(copy, test));
9 return 0;
10 }
- 두 개의 매개인자를 받으며, 첫 번째 인자로 받은 문자열 포인터에 두 번째로 받은 문자열 포인터의 값을 복사한다.
- 이후 복사가 완료된 첫 번째 문자열 포인터를 반환해준다.
strcmp
- string + compare
- 두 개의 문자열을 비교하여 같은지 다른지 알아내는데 사용되는 함수이다.
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(){
5 char test1[10] = "Hello";
6 char test2[10] = "Helloo";
7
8 printf("%d\n", strcmp(test1, test2));
9 return 0;
10 }
- strcmp 함수 역시 두 개의 문자열 포인터를 매개로 받는다.
- 두 문자열 포인터가 가리키는 문자열에 대해 아스키코드에 따라서 숫자를 계산한다.
- 만약 앞에 인자가 더 크다면 양수를 반환하고, 뒤에 인자가 더 크다면 음수를 반환한다.
- 두 인자들이 가리키는 문자열이 일치한다면, 0을 반환한다.
strcat
- string + concatenate
- 두 문자열을 이어붙히는 함수이다.
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(){
5 char test1[20] = "Hello";
6 char test2[10] = "World!!!";
7
8 strcat(test1, test2);
9
10 printf("%s\n", test1);
11 return 0;
12 }
- 첫 번째 인자로 받은 문자열에 두 번째 인자로 받은 문자열을 이어붙히고 반환한다.
- 이 때 주의해야할 점은 첫 번째 문자열의 크기이다. 이어 붙힌 후의 크기를 생각하지 않고 배열의 크기를 작게 생성해놓았다면, strcat을 쓸 때 코드의 안정성이 떨어질 수 있을 것이다.
- 또한 당연하게도, strcat의 인자로 "Hello" 이런 식으로 변수가 아닌 문자열 형태로 사용하려한다면, 첫 번째 인자가 아닌 두 번째 인자에만 사용할 수 있다. 첫 번째 인자를 수정해서 반환하는 함수이기 때문에 변수 형태로 선언되어 있어야 한다.
strstr, strchr
- 해당 함수들은 문자열 내에서 특정한 문자열 또는 문자가 있나 확인하는 함수이다.
- strstr은 문자열 내에서 특정 문자열을 찾는 함수이고, strchr은 문자열 내에서 특정 문자를 찾아낸다.
- 두 문자열 포인터를 매개 변수로 받고, (hatstack, needle)이라고 표현해보겠다. '모래사장에서 바늘 찾기'라는 말이 외국에서는 'needle in a haystack'으로 사용된다더라.
1 #include <stdio.h>
2 #include <string.h>
3
4 int main(){
5 char haystack[20] = "Hello World!!";
6
7 if (strstr(haystack, "llo Wor")){
8 printf("found needle!\n");
9 }
10
11 if (strchr(haystack, 'd')){
12 printf("found needle!\n");
13 }
14
15 return 0;
16 }
- 만약 needle이 있다면, strstr(또는 strchr)은 NULL이 아닌 값을 반환하고, 없다면 NULL을 반환한다.
- 따라서 위 코드에서처럼 if문과 함께 사용하는 것이 일반적인 것 같다.