ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [메모리] 문자열 복사
    Stage/Computer Science 2021. 5. 31. 23:36

    학습 목표

    문자열을 복사할 수 있다.

     

    1. 문자열 복사

    문자열을 복사하기 위해서 아래 코드를 실행시켜 보자.

    #include <cs50.h>
    #include <ctype.h>
    #include <stdio.h>
    
    int main(void)
    {
        string s = get_string("s: ");
        string t = s;
    
        t[0] = toupper(t[0]);
    
        printf("s: %s\n", s);
        printf("t: %s\n", t);
    }
    • string t = s;로 문자열을 복사해놓고 출력을 했다.
    • 입력값으로 s: emma 라고 줬을 때, 나오는 출력 값은 둘 다 Emma로 나온다.
    • s는 emma, t는 EMMA 로 예상했는데, 예상 과는 다른 결과가 나왔다.
    • s 변수에는 문자열 emma가 아닌 문자열 emma가 있는 메모리 주소가 저장되기 때문이다.
    • t도 마찬가지로 메모리 주소를 가리키고 있고, 이 t를 toupper()로 수정하게 되면 s에도 그대로 반영이 된다.

    2. malloc

    두 문자열을 메모리상에서 복사하려면 어떤 방법을 써야 할까?

    #include <cs50.h>
    #include <ctype.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
        char *s = get_string("s: ");
        char *t = malloc(strlen(s) + 1);
    
        for (int i = 0, n = strlen(s); i < n + 1; i++)
        {
            t[i] = s[i];
        }
    
        t[0] = toupper(t[0]);
    
        printf("s: %s\n", s);
        printf("t: %s\n", t);
    }
    • 못 보던 함수가 나왔다. malloc?
      malloc 이라는 함수는 정해진 크기 만큼 메모리를 할당하는 함수이다.
    • 문자열 s의 길이에서 +1(널 종단 문자)을 한 크기 만큼 메모리를 할당한다.
      예를 들어, emma라는 문자열이라고 한다면, 메모리 크기를 5로 할당한다.
    • for문을 돌면서 배열 인덱스를 이용해 s 문자열의 문자 하나하나를 t 문자열로 복사시킨다.
    • 이 코드를 실행하면, 우리가 처음에 예상했던 대로 s는 emma, t는 EMMA가 출력된다.

    'Stage > Computer Science' 카테고리의 다른 글

    [메모리] 메모리 교환, 스택, 힙  (0) 2021.06.01
    [메모리] 메모리 할당과 해제  (0) 2021.05.31
    [메모리] 문자열 비교  (0) 2021.05.31
    [메모리] 문자열  (0) 2021.05.31
    [메모리] 포인터  (0) 2021.05.31

    댓글