-
[메모리] 문자열 복사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