본문 바로가기
프로그래밍 언어/C 언어

[C] 배열과 문자열 관계

by 까망 하르방 2021. 3. 20.
반응형

배열과 문자열 관계 

배열 개념을 이해하면서 문자열과도 함께 생각해 볼 수 있다.

원시적인 C 언어는 기본적으로 자체적인 문자열 자료형을 제공하지 않음.

따라서 C 언어에서는 문자(Character)를 여러 개 묶어 놓는 형태로 문자열을 표현

▶ char형 배열을 이용해서 문자열 저장과 변경도 가능해진다.

    (C++에서는 자체적으로 string 자료형 제공)

char str[7] = "hi dev"; // 공백 포함해서 6자
char str[] = "hi dev"; // 자동으로 크기를 결정한다.

 

※ 문자열의 저장을 목적으로 char형 배열을 선언할 경우에는 

    특수문자 '\0'이 저장될 공간까지 고려해서 배열의 길이를 결정해야 한다.

    따라서, 위의 경우 글자는 6자이지만 '\0'을 포함해서 길이가 7이 되는 것이다!

 

char s[20];
scanf("%s", &a); // %s 형식 지정자를 사용.

※ 널 문자가 존재하면 문자열이고,

    널 문자가 존재하지 않으면 문자열이 아니다.

 

※ 널 문자와 공백은 엄연히 다르다.

#include <stdio.h>

void main() {

    char nu = '\0'; // 널 문자
    char sp = ' '; // 공백

    printf("ㅁ%cㅁ%cㅁ", nu, sp); // 문자열에서 차이 보기
    printf("\n");
    printf("%d %d", nu, sp); // 아스키 코드값에서의 차이

}

문자형태로는 둘의 차이를 볼 수 없지만.

정수형태로 출력해보면 아스키 코드 값이 다른 것을 확인할 수 있다.

#include <stdio.h>
void main() {
        
        char str[50];
        int idx = 0;
        scanf("%s", str);
        printf("입력 받은 문자열: %s \n", str);
        
        while (str[idx] != '\0') {
               printf("%c", str[idx]);
               idx++;
        }
        printf("\n");
}

반복문을 통해서 정상 출력되는 것을 통해 scanf()를 통해 받은 문자열 끝에는 널 문자가 삽입되었음을 알 수 있다.

(사실상, C언어에서 표현하는 모든 문자열의 끝에는 널 문자가 자동으로 삽입된다.)

이처럼 끝에 널문자가 필요한 이유는 메모리상에서 문자열은 이진 데이터로 저장되기 때문에

문자열의 시작과 끝을 구분하기 위해서이다.

 

※ 아래와 같이 마지막에 널 문자가 있어야 문자열이라고 할 수 있다.

char arr[] = {'H', 'i', '~'};

char arr[] = {'H', 'i', '~', '\0'};

 

 

※ scanf()로는 한 문자열을 받을 수 있지, 한 문장을 받을 수는 없다.

이는 scanf 함수가 데이터를 구분 짓는 기준이 공백이기 때문이다.

위의 경우에는 "hello", "world" 이렇게 총 2개의 문자열이 입력된 경우이다.

 

반응형

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

[C] calloc( ) & realloc( )  (0) 2021.03.20
[C] 문자열  (0) 2021.03.20
[C] 배열 선언 및 초기화  (0) 2021.03.20
[C] 문자열 배열과 문자열 배열 동적 할당  (0) 2021.03.20
[C] 함수의 선언  (0) 2021.03.19

댓글