문자열과의 관계

Jaemyeong Lee·2024년 8월 7일
0

FastCampusC++

목록 보기
32/78

C++ 포인터와 문자열의 관계

C++에서 문자열은 문자 배열로 표현됩니다. 포인터를 사용하면 문자열을 효율적으로 다룰 수 있습니다. 이번 포스트에서는 포인터와 문자열의 관계를 다양한 예제와 함께 살펴보겠습니다.

#pragma warning(disable: 4996)
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    // 첫 번째 블록: 문자 배열과 포인터
    {
        // 문자 배열 선언 및 초기화
        char str0[] = "abcd"; // 문자 배열 str0을 선언하고 "abcd"로 초기화
        char* str1 = str0;    // 포인터 str1을 선언하고 str0의 주소를 저장

        // str0과 str1 출력 (둘 다 "abcd"를 출력)
        cout << str0 << endl; // "abcd" 출력
        cout << str1 << endl; // "abcd" 출력
    }
    
    // 두 번째 블록: 문자열 리터럴
    {
        // 문자열 리터럴을 가리키는 포인터 선언
        const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
        cout << str2 << endl;       // "hello" 출력

        // 문자열 리터럴의 타입 출력
        cout << typeid("hello").name() << endl; // 문자열 리터럴의 타입 정보 출력 (const char[6])
    }
    
    // 세 번째 블록: 문자열 함수 사용 예제
    {
        char str0[100] = "abcd"; // 크기가 100인 문자 배열 str0을 선언하고 "abcd"로 초기화
        char* str1 = str0;       // 포인터 str1을 선언하고 str0의 주소를 저장
        const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언

        // 문자열의 길이 출력
        cout << strlen(str2) << endl; // str2가 가리키는 문자열의 길이 출력 (5)

        // 문자열 복사
        strcpy(str0, str2); // str2가 가리키는 문자열을 str0에 복사
        cout << str0 << endl; // "hello" 출력 (str0의 내용이 "hello"로 변경됨)

        // 문자열 비교
        cout << strcmp(str0, str2) << endl; // str0과 str2의 문자열을 비교 (같으면 0 출력)
    }

    return 0;
}

1. 문자 배열과 포인터

첫 번째 블록에서는 문자 배열을 포인터로 가리키는 방법을 보여줍니다.

{
    char str0[] = "abcd"; // 문자 배열 str0을 선언하고 "abcd"로 초기화
    char* str1 = str0;    // 포인터 str1을 선언하고 str0의 주소를 저장

    cout << str0 << endl; // "abcd" 출력
    cout << str1 << endl; // "abcd" 출력
}

위 코드에서는 str0은 문자 배열이고, str1str0의 첫 번째 요소를 가리키는 포인터입니다. 두 변수 모두 동일한 문자열 "abcd"를 출력합니다.

2. 문자열 리터럴

두 번째 블록에서는 문자열 리터럴을 가리키는 포인터를 다룹니다.

{
    const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언
    cout << str2 << endl;       // "hello" 출력

    cout << typeid("hello").name() << endl; // 문자열 리터럴의 타입 정보 출력 (const char[6])
}

여기서 str2는 문자열 리터럴 "hello"를 가리키는 포인터입니다. typeid를 사용하여 문자열 리터럴의 타입 정보를 확인할 수 있습니다.

3. 문자열 함수 사용 예제

세 번째 블록에서는 문자열 함수(strlen, strcpy, strcmp)를 사용하여 문자열을 처리하는 방법을 보여줍니다.

{
    char str0[100] = "abcd"; // 크기가 100인 문자 배열 str0을 선언하고 "abcd"로 초기화
    char* str1 = str0;       // 포인터 str1을 선언하고 str0의 주소를 저장
    const char* str2 = "hello"; // 문자열 리터럴 "hello"를 가리키는 포인터 str2 선언

    cout << strlen(str2) << endl; // str2가 가리키는 문자열의 길이 출력 (5)

    strcpy(str0, str2); // str2가 가리키는 문자열을 str0에 복사
    cout << str0 << endl; // "hello" 출력 (str0의 내용이 "hello"로 변경됨)

    cout << strcmp(str0, str2) << endl; // str0과 str2의 문자열을 비교 (같으면 0 출력)
}
  • strlen(str2)str2가 가리키는 문자열의 길이를 반환합니다.
  • strcpy(str0, str2)str2가 가리키는 문자열을 str0에 복사합니다.
  • strcmp(str0, str2)str0str2의 문자열을 비교하여 같으면 0을 반환합니다.

결론

포인터와 문자열은 C++에서 매우 중요한 개념입니다. 문자열은 문자 배열로 표현되며, 포인터를 사용하여 효율적으로 다룰 수 있습니다. 이번 포스트에서는 포인터와 문자열의 기본 개념과 다양한 사용법을 예제를 통해 살펴보았습니다. 포인터와 문자열의 관계를 잘 이해하고 활용하면 문자열 처리와 메모리 관리를 더욱 효율적으로 할 수 있습니다. 반복해서 연습하고 실습해보세요!

profile
李家네_공부방

0개의 댓글