Skip to main content
C string

C언어 문자열 (String)

문자열(string)은 “hello”와 같은 문자들의 연속된 집합입니다. 여기서 중요한 점은  C언어에는 문자열이라는 데이터 타입이 없습니다. 문자열은 단순히 문자 배열(array)에 저장된 널(null) 문자(‘\0’)로 끝나는 문자들입니다.

결국 “hello”는 5개 문자와 ‘\0’로 구성된 문자 배열(array) 입니다. ‘\0’는 컴파일러에 의해 자동으로 문자열 끝에 삽입됩니다.

hello in string

문자열 선언과 초기화

문자열은 다음과 같이 선언하고 초기화합니다.

char name[13] = "HelloWorld";
char name[10] = {'L','e','s','s','o','n','s','\0'};

문자열은 더블 따옴표(“…”)를 사용합니다. 그리고 문자 캐릭터로 초기화할 경우에는 마지막에 ‘\0’을 포함해야 합니다.

다음은 문자열의 잘못된 초기화 방법입니다.

char ch[3] = "hell";
char str[4];
str = "hell";

첫 번째 예는 배열의 크기가 잘못된 경우이고 두 번째 예는 얼핏보면 맞는 것 같지만 실제는 “hell”의 메모리 주소값을 배열에 저장하려고 하는 것입니다. 결국 “error: assignment to expression with array type: 에러가 발생합니다.

원하는 값을 출력하기 위해서는 다음과 같이 수정해야 합니다.

char *str;
str = "hell";

더 자세한 이야기는 포인터에서 다루도록 하겠습니다.

문자열 입출력

문자열 입력 방법 중 하나는 scanf() 함수와 서식 지정자 %s를 사용하여 사용자의 입력을 받습니다. 하지만 scanf() 함수의 문제점은 공백을 만났을 경우 입력은 끝이납니다.  그러므로 만약 “Hello World”를 입력했을 경우 scanf()는 오직 “Hello”만 입력받습니다.

모든 문자를 입력받기 위해서는 서식 지정자를 다음과 같이 “%[^\n]” 사용하면 모든 문자를 입력받을 수 있습니다.

#include <stdio.h>
void main()
{
   char str[20];
   printf("Enter a string");
   scanf("%[^\n]", &str); //모든 문자 포함
   printf("%s", str);
}

문자열 처리 함수

C언어 자체내에 다양한 문자열 처리 함수가 내장되어 있습니다. 이러한 함수를 사용하기 위해서는 string.h 헤더 파일을 포함시켜야 합니다.

다음은 문자열 처리 함수 중 가장 많이 쓰이는 함수들입니다.

strcat() 두 문자열을 연결하는데 사용합니다.
strlen() 문자열의 길이를 표시하는데 사용합니다.
strcmp() 두 문자열을 비교하는데 사용합니다.
strcpy() 문자열을 다른 곳에 복사합니다.

strcat() 함수

strcat("hello", "world");

OUTPUT
helloworld

“hello” 문자열에 “world” 문자열을 연결합니다. 결국 “helloworld”가 출력됩니다.

strlen() 함수

문자열의 길이를 출력합니다.

int j; 
j = strlen("helloworld");
printf("%d",j);

OUTPUT
10

strcmp() 함수

두 문자열의 첫번째 일치하지 않는 문자의 ASCII 차이를 반환합니다. 리턴값은 -1: 작은 경우 0: 같은 경우, 1: 큰 경우 입니다.

int j; 
j = strcmp("hello", "world");
printf("%d",j);

OUTPUT
-1

strcpy() 함수

두 번째 인수의 문자열을 첫 번째 인수에 복사합니다.

#include <stdio.h>
#include <string.h>

int main()
{
    char s1[50];
    char s2[50];
    strcpy(s1, "helloworld"); // "helloworld"를 s1에 복사합니다.
    strcpy(s2, s1);     //s1을 s2에 복사합니다.
    printf("%s\n", s2);
    return 0;
}

OUTPUT
helloworld
<< 다음 혼자 공부하는 C언어 이전 >>

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다