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

[C] 문자열

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

문자열

문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL) 값을 포함.

널 값은 문자열의 끝을 알리는 목적으로 사용

 

C 언어에서 표현하는 모든 문자열의 끝에는 널 문자가 자동으로 삽입된다고 보면 됩니다.

//  마지막에 널 문자가 없으므로 단순 문자 배열
char arr[] = {'H', 'i', '~'};
// 마지막에 널 문자가 있으므로 문자열
char arr[] = {'H', 'i', '~', '\0'}; 

while(str[idx] != '\0'){ 
    // 널문자가 없다면 끝을 알 수 없음
    printf("%c", str[idx++]);
}

 

[예제] 널 문자

#include <stdio.h>

int main(void) {
    char str[50] = "I like C programming";
    printf("%s \n", str);
    str[8] = '\0';
    printf("%s \n", str);
    str[6] = '\0';
    printf("%s \n", str);
}

ex) "I like C programming"라고 입력하면

scanf는 "i am c programmer"를 입력해도 공백으로 구분하기 때문에 "i" 만 입력받게 됩니다.

따라서, 문자열을 입력받기 위한 다른 함수가 필요.

 

※ 문자열의 끝에는 '\0' 널문자가 저장됨 따라서 공간 크기를 고려할 때 주의

char str[5] = "Go !"
char str[] = "Go !"  // 이 형태도 가능 (문자열 크기 5로 할당됨)

 

※ 널문자와 공백은 다른 것입니다. 실제 아스키코드만 봐도 다릅니다.

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

printf("%d %d", nu, sp); // 0과 32 출력

 

 

문자열 형태로 포인터를 사용하면 포인터에 특정한 문자열의 주소를 넣게 됩니다.

포인터로 문자열을 선언했다고 하더라도 기존의 배열처럼 처리할 수 있습니다.

#include <stdio.h>

int main(void){
    char *a = "Hello World";
    printf("%c\n", a[1]);
    printf("%c\n", a[4]);
    printf("%c\n", a[8]);
}

 

 

str 배열명이 하나의 포인터 역할을 하기 때문에 &str

(문자열 끝에 널 문자가 존재)

char str[50]
scanf("%s", str); // 문자열을 입력 받아서 배열 str에 저장

 

관련 문제

[Jungol] 1880 암호풀기(Message Decowding) 

[Jungol] 1516 단어세기 

 

반응형

댓글