본문 바로가기

C 언어

C 언어에서 문자열은 문자 배열로 취급된다.

C 언어에서 문자열은 문자 배열로 취급된다. 문자열을 처리할 때 문자열 리터럴(예: "banana")은 기본적으로 문자열의 시작 주소를 가리키는 포인터로 사용된다. 

포인터와 배열의 차이

1. 포인터 사용:여기서 my_string은 "banana" 문자열의 시작 주소를 가리키는 포인터이다. 문자열 리터럴은 읽기 전용 메모리에 저장되며, my_string은 그 메모리 위치를 가리킨다.

 
const char* my_string = "banana";

 

 

2. 배열 사용:여기서 my_string은 문자열 "banana"의 복사본을 배열로 가지고 있다. 이 경우 문자열은 읽기 전용 메모리에 저장된 것이 아니라, 배열 my_string에 복사된다. 

const char my_string[] = "banana";

왜 포인터를 사용하는가?

  • 효율성: 포인터를 사용하면 메모리 주소만 전달하므로, 메모리 사용량이 적고 더 빠르다. 문자열이 길어질수록 배열을 복사하는 것보다 포인터를 사용하는 것이 더 효율적이다.
  • 문자열 리터럴의 특성: 문자열 리터럴은 변경할 수 없는 읽기 전용 메모리에 저장되므로, 이를 가리키는 포인터를 사용하는 것이 일반적이다. 

예제 코드

아래는 문자열을 포인터로 사용하는 예제이다. my_string과 is_prefix가 문자열의 시작 주소를 가리키는 포인터이다. 

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

int solution(const char* my_string, const char* is_prefix) {
    size_t is_prefix_len = strlen(is_prefix);

    if (strncmp(my_string, is_prefix, is_prefix_len) == 0) {
        return 1; // 접두사인 경우
    }
    return 0; // 접두사가 아닌 경우
}

int main(void) {
    const char* my_string = "banana";
    const char* is_prefix = "ban";

    int result = solution(my_string, is_prefix);
    printf("%d\n", result); // 결과 출력
    return 0;
}