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문과 함께 사용하는 것이 일반적인 것 같다.