C언어 문자열 (String)
반응형

문자열(string)은 문자들의 연속된 집합입니다. 그리고 주의할 점은 C언어에서 문자열은 기본 데이터 타입이 아닙니다. 문자열은 문자들이 저장된 배열(array)입니다. 그리고 문자열의 끝은 항상 ‘\0’입니다.

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

문자열 선언과 초기화

문자열을 선언하고 초기화하는 방법입니다.

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를 사용하여 입력을 받습니다. 하지만 단점은 공백을 만났을때 입력이 종료됩니다. 만약 “Hello World”를 입력했을 때 오직 “Hello”까지만만 입력받습니다.

모든 문자를 입력받기 위해서는 “%[^\n]”를 서식 지정자로 사용해야 합니다.

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

문자열 처리 함수

다음은 대표적인 문자열 처리 함수입니다. <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언어 이전 >>
반응형

'프로그래밍 > C' 카테고리의 다른 글

C언어 함수  (0) 2019.12.19
C언어 플로우차트 (Flow Chart)  (0) 2019.12.19
C언어 배열 (Array)  (0) 2019.11.05
C언어 포인터 변수 이해  (0) 2019.10.17
C언어 반복문 (Loop)  (0) 2019.09.25