4. C의 문자배열과 문자열

 

C의 문자열

 

  사실 C언어의 문자열 처리방법은 크게 2가지 기법이 존재한다.
문자열처리함수를 사용하는 방법과 char * 형을 마치 string형처럼 사용하는 방법이다.
  C언어가 등장했을 때만 해도 문자열 처리에 대한 부분이 중요하지 않게 생각되었던 시대였다.
그리고, 대량의 데이터를 처리하기 위한 요소도 없었다고 볼 수 있다.

  따라서, C언어가 추구하는 문자열에 대한 철학과 C++이후에 등장한 문자열 처리기법이 C언어 내부에 혼합되어 현재 존재한다고 본다.
이러한 상황에서 문자열을 이해하기 위해서는 2가지 방법을 모두 활용하여 익힐 필요가 있다.

 

문자열 처리 함수

string.h 헤더파일을 include 하여 문자열 관련 처리 함수를 사용할 수 있다.

사용할 수 있는 함수 목록은 다음과 같다.

char* strcpy(char* s1, const char* s2);

s2가 가르키는 문자열을 s1이 가르키는 문자열로 널문자까지 포함하여 복사하고 리턴값은 s1의 시작 주소를 반환한다.
 

char* strncpy(char* s1, const char*s2, size_t n);

s2가 가르키는 문자열의 내용을 n byte만큼 s1이 가르키는 문자열로 복사하고 리턴 값은 s1의 시작 주소를 반환한다.
 

char* strcat(char* s1, const char* s2);

s2가 가르키는 문자열을 s1이 가르키는 문자열의 끝에 이어서 복사한다. 리턴값은 s1의 시작 주소를 반환한다.
 

char* strncat(char* s1, const char* s2, size_t n);

s2가 가르키는 문자열을 s1이 가르키는 문자열 끝에 n 바이트만큼 복사한다. 리턴값은 s1의 시작 주소를 반환한다.
 

int strcmp(const char* s1, const char* s2);

s1이 가르키는 문자열과 s2가 가르키는 문자열을 비교하는데 문자의 아스키 코드값을 비교한다. s1과 s2의 문자열에서 서로 다른 문자(대소문자 구분함)가 나타나면 해당 문자의 아스키 코드값이 s1이 클 경우 양수(보통 1)를 반환하고 s2가 클 경우 음수(보통 -1)을 반환한다. 만약 두 문자열이 같을 경우 0을 반환한다. 보통 두 문자열이 일치하는지 확인할 때 주로 쓰인다.
 

int strncmp(const char* s1, const char* s2, size_t n);

기본적으로 strcmp와 동일하고 다만 n 바이트만큼만 비교한다는 점에서 다르다.
 

char* strchr(const char* s, int c);

S가 가르키는 문자열에서 아스키 코드 c에 해당하는 문자가 처음 나타나는 위치의 주소값을 반환한다. 찾는 문자값이 없는 경우 NULL 반환.
 

char* strbrk(const char* s1, const char* s2);

s1이 가르키는 문자열에서 s2에 포함된 문자가 처음 나타난 위치의 주소값을 반환한다. 찾을 수 없는 NULL 반환.
 

char* strrchr(const char* s, int c);

s가 가르키는 문자열에서 c(아스키 코드값)에 해당하는 문자가 마지막으로 나타나는 위치의 주소값을 반환한다. 널 문자도 문자열의 일부이므로 찾을 수 있으며 찾는 값이 없을 경우 NULL 반환.
 

char* strstr(const char* s1, const char* s2)

S1이 가르키는 문자열에서 s2의 문자열이 처음 나타난 위치의 주소값을 반환한다. 없으면 NULL 반환. 보통 부분적인 문자열 일치 유무를 확인할 때 사용한다.
 

size_t strlen(const char* s);

문자열 s의 문자의 수(바이트 단위) 반환. 널('\0') 문자는 포함안함. 보통 문자열의 문자 길이를 체크할 때 쓴