✅ 목표 (Goal)

문자열을 heap에 만들어 보자.

🥕 당근이의 한마디

변경할수 있다고 했지.. 좋다고는 안했다.

결론부터 말하자면, 이렇게는 잘 사용하지 않는다. 왜?

불편하거덩

그래도 일단 한번 만들어 보자.

✅ char*을 malloc로 만들어 보자.

앞서 char*이 변경 불가능하다고 했는데

변경 불가능한 이유는 메모리의 DS(데이터세그먼트)의 RO 영역에 만들어 지기 때문이다.

응.. 그래? 그렇다면 RO가 아닌 영역에 만들면 변경할수 있나? 그렇다! 변경 가능해진다.

그래서 변경 가능한 heap영역에 만들어보자.

#include <stdio.h>

void my_strcpy(char* dst, const char* src) {
    if (dst == NULL) return;
    if (src == NULL) return;

    //while (*dst++ = *src++);
    // 아래 코드는 위와 코드인데, 이해를 돕기 위해 풀어쓴것뿐이다.
    while (*src != '\\0') {
        *dst = *src;
        src += 1;
        dst += 1;
    }
    //dst += 1;
    *dst = '\\0';
}

int main() {
    char  str1[32] = "Hello";

    char* str2 = (char*)malloc(sizeof(char) * 10);
    if (str2 == NULL) { return; }
    strcpy(str2, "World");

    printf("str1: %s\\n", str1);
    printf("str2: %s\\n", str2);

    str1[0] = 'x';
    *(str1+1) = 'y';
    printf("str1: %s\\n", str1);

    str2[0] = 'a';
    *(str2 + 1) = 'b';
    printf("str2: %s\\n", str2);

    my_strcpy(str1, str2);
    printf("str1: %s\\n", str1);
    printf("str2: %s\\n", str2);

    free(str2);
    return 0;
}