WinCNT

C 언어 - 11. 문자열 본문

Study/C

C 언어 - 11. 문자열

WinCNT_SSS 2021. 9. 5. 21:31

문자열의 개념

  • 문자열 = 문자들의 배열
  • 컴퓨터 메모리 구조상 마지막에 NULL(\0)값을 포함한다
    • NULL값은 문자열의 끝을 알리는 목적으로 사용
    • printf() 함수를 실행하면 컴퓨터는 내부적으로 NULL값이 나올 때까지 출력을 반복함

문자열과 포인터

  • 문자열 형태의 포인터를 사용하면 특정 문자열의 주소를 넣게 된다
  • #include<stdio.h>
    int main(void) {
        char *a = "Hello World"; //문자열 리터럴 : 배열이 아닌 ""에 문자열이 들어간 구조
        printf("%s\n", a); //문자열 리터럴(상수)의 값
        printf("%p\n", &a); //포인트 변수 a의 값
    
        system("pause");
        return 0;
    }
    • 문자열을 문자열 리터럴로 선언을 하면, 문자열 리터럴은 상수로서 읽기 전용으로 사용됨
    • 문자열 리터럴은 컴파일러가 알아서 메모리 주소를 결정
      (위의 코드에서는 포인트 변수 a가 문자열 리터럴의 주소값을 가지고 있다)
    • 문자열 리터럴은 상수(변경 불가)이기 때문에, 변경 시에는 포인터의 주소를 변경해야 함

  • 배열과 포인터는 치환이 가능
    포인터로 문자열을 선언했다고 하더라도 배열처럼 처리 가능하다
  • #include<stdio.h>
    int main(void) {
        char *a = "Hello World"; //문자열 리터럴 : 배열이 아닌 ""에 문자열이 들어간 구조
        printf("%s\n", a); //문자열 리터럴(상수)의 값
        printf("%p\n", &a); //포인트 변수 a의 값
    
        //포인트 문자열을 배열처럼 처리할 수 있음
        printf("%c\n", a[1]);
        printf("%c\n", a[4]);
        printf("%c\n", a[8]);
    
        system("pause");
        return 0;
    }

문자열 입출력 함수

  • scanf() 함수 : 공백 전까지의 입력을 받음
  • gets() 함수 : 공백까지 포함하여 한 줄을 입력받음
    단 gets() 함수는 버퍼의 크기를 벗어나도 입력을 받음
  • gets_s() 함수 : gets() 함수와 비슷하나, 버퍼의 크기를 철저히 지키며 입력을 받음
    범위를 넘으면 그 즉시 런타임(Runtime) 오류가 발생함
  • #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    
    int main(void) {
        char a[100];
        //scanf("%s",&a); //공백 전까지의 입력을 받음
        //printf("%s\n", &a);
    
        gets(a); //공백을 포함하여 한 줄을 입력받음
        printf("%s\n", &a);
    
        gets_s(a, sizeof(a)); //버퍼의 크기를 지키며 공백을 포함하여 한 줄을 입력받음
        printf("%s\n", a);
    
        system("pause");
        return 0;
    }

문자열 처리를 위한 다양한 함수

  • C언어에서의 문자열 함수는 <string.h> 라이브러리에 포함되어 있음
  • 문자열 처리를 위한 C언어의 함수(출처 : 퍼스트 캠퍼스)
  • #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<string.h> //최근 C언어에는 string 라이브러리를 기본적으로 포함하는 경우도 있음
    
    int main(void) {
        char a[50] = "Hello Word!";
        char b[50] = "Jojo's Bizarre Adventure";
        printf("문자열 a : %s\n", a);
        printf("문자열 b : %s\n", b);
    
        //strlen() : 문자열의 길이를 반환하는 함수
        printf("\nstrlen() : 문자열의 길이를 반환하는 함수\n");
        printf("문자열 a의 길이 : %d\n", strlen(a));
    
        //strcmp() : 문자열을 사전 순으로 비교하는 함수
        printf("\nstrcmp() : 문자열을 사전 순으로 비교하는 함수\n");
        printf("두 문자열의 사전 순 비교 : %d\n", strcmp(a, b));
    
        //strcpy() : 문자열을 복사하는 함수
        printf("\nstrcpy() : 문자열을 복사하는 함수\n");
        strcpy(a, b);
        printf("복사 후의 문자열 a : %s\n", a);
    
        //strcat() : 문자열을 합치는 함수
        printf("\nstrcat() : 문자열을 합치는 함수\n");
        char c[50] = "Hello Word!";
        printf("문자열 b : %s\n", b);
        printf("문자열 c : %s\n", c);
        strcat(c, b);
        printf("문자열 c에 b를 합한 값 : %s\n", c);
    
        //strstr() : 특정 문자열을 찾아 그 위치를 반환하는 함수
        //특정 문자열을 찾은 주소 값 자체를 반환하므로 단순히 출력하면 찾은 이후 모든 문자열을 반환함
        printf("\nstrstr() : 특정 문자열을 찾아 그 위치를 반환하는 함수\n");
        char d[20] = "I like you";
        char e[20] = "like";
        printf("문자열 d : %s\n", d);
        printf("문자열 e : %s\n", e);
        printf("찾은 문자열 : %s\n", strstr(d, e));
    
        system("pause");
        return 0;
    }

'Study > C' 카테고리의 다른 글

C 언어 - 13. 다차원 배열과 포인터 배열  (0) 2021.09.08
C 언어 - 12. 컴퓨터가 변수를 처리하는 방법  (0) 2021.09.06
C 언어 - 10. 문자  (0) 2021.08.05
C 언어 - 09. 포인터  (0) 2021.08.03
C 언어 - 08. 배열  (0) 2021.08.03