C 언어에서 문자열(string)은 널(null) 문자(\0)로 끝나는 문자들의 배열입니다. 여기서 중요한 점은 널 문자를 사용자가 직접 입력하는 것이 아니라, 컴파일러가 문자열의 끝에 자동으로 추가한다는 것입니다.
배열과 문자열의 차이
배열과 문자열의 차이는 널 문자의 유무입니다. 일반적인 배열의 경우 컴파일러가 마지막에 널 문자를 붙이지 않지만, 문자열은 컴파일러가 자동으로 널 문자를 추가하여 문자열의 끝을 표시합니다.
문자열 선언 방법
C 언어에서 문자열을 선언하는 기본 문법은 다음과 같습니다.
char myStr[size];
각 구성 요소의 의미는 다음과 같습니다.
- myStr: 문자열의 이름
- size: 문자열의 크기를 지정
문자열 초기화 방법
C 언어에서 문자열은 아래 두 가지 방식으로 초기화할 수 있습니다.
char myStr[size] = "string";
char myStr[size] = { 's', 't', 'r', 'i', 'n', 'g', '\0' };첫 번째 방법은 문자열 상수를 그대로 대입하는 방식이며, 두 번째 방법은 각 문자를 개별적으로 나열하고 마지막에 널 문자를 명시하는 방식입니다.
C 언어의 주요 문자열 함수
C 언어는 <string.h> 헤더 파일을 통해 다양한 문자열 처리 함수를 제공합니다.
| 함수 | 설명 |
|---|---|
| strcpy(s1, s2) | s2 문자열을 s1에 복사합니다. |
| strcat(s1, s2) | s2를 s1의 끝에 이어 붙입니다(연결). |
| strlen(s1) | s1의 길이를 반환합니다. |
| strcmp(s1, s2) | s1과 s2가 같으면 0을 반환합니다. s1의 ASCII 값이 s2보다 크면 0보다 큰 값을, 작으면 0보다 작은 값을 반환합니다. |
| strchr(s1, ch) | s1에서 문자 ch가 처음 나타나는 위치의 포인터를 반환합니다. |
| strstr(s1, s2) | s1에서 문자열 s2가 처음 나타나는 위치의 포인터를 반환합니다. |
문자열 함수 활용 예제
다음 예제는 위에서 소개한 문자열 함수들을 실제로 사용하는 방법을 보여줍니다.
#include <stdio.h>
#include <string.h>
int main () {
char s1[10] = "Hello";
char s2[10] = "World";
int len, com ;
strcpy(s1, s2);
printf("Strings s1 and s2 : %s\t%s\n", s1, s2 );
strcat( s1, s2);
printf("String concatenation: %s\n", s1 );
len = strlen(s1);
printf("Length of string s1 : %d\n", len );
com = strcmp(s1,s2);
printf("Comparison of strings s1 and s2 : %d\n", com );
return 0;
}실행 결과
Strings s1 and s2 : WorldWorld String concatenation: WorldWorld Length of string s1 : 10 Comparison of strings s1 and s2 : 87
결과 해석
- strcpy(s1, s2) 실행 후 s1은 "Hello"에서 "World"로 변경되었습니다.
- strcat(s1, s2) 실행 후 s1은 "World"와 "World"가 연결된 "WorldWorld"가 되었습니다.
- strlen(s1)은 연결된 문자열의 길이 10을 반환했습니다.
- strcmp(s1, s2)는 'W'('W' = 87)와 '\0'(0)의 ASCII 값 차이인 87을 반환했습니다.