[CS50] 메모리 - 문자열 복사
TIL
이미 저장되어 있는 문자열을 다른 곳에 복사하려면 어떻게 해야 할까? 문자열을 복사하는 방법과 주의사항을 알아보자.잘못된 문자열 복사문자열을 복사하기 위해 아래 코드를 실행해보자.#include #include #include 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);} 입력: emma출력:s: Emmat: Emmas 변수에는 'emma'라는 문자열이 아닌 그 문자열이 있는 메모리 주소가 저장된다. string s는 char *s와 동일한 의미이므로, t도 s와 동일한 주소를 가리킨다. 그렇기 때문..
[CS50] 메모리 - 문자열 비교
TIL
두 문자열이 같은 내용을 담고 있는지는 어떻게 비교할 수 있을까?문자열이 저장되어 있는 방식을 들여다보며, 문자열을 직접 비교하는 것이 가능한지 알아보자.문자열의 메모리 주소#include int main(void){ char *s = "EMMA"; printf("%p\n", s); // "E"의 메모리 주소}이 코드는 포인터 s의 값을 출력한다. 즉, "EMMA"라는 문자열의 가장 첫 번째 값인 "E"에 해당하는 메모리 주소를 출력한다. 각 문자의 주소printf("%p\n", &s[0]); // "E"의 메모리 주소printf("%p\n", &s[1]); // "M"의 메모리 주소printf("%p\n", &s[2]); // "M"의 메모리 주소printf("%p\n", ..
[CS50] 메모리 - 문자열과 메모리
TIL
우리는 이전에 string이라는 자료형을 사용했지만, 이는 실제로 C에서 존재하지 않는 자료형이다.문자열이 실제로 메모리상에 어떻게 저장되어 있는지, 문자열을 손쉽게 저장하고 접근하기 위한 방법을 배워보자.문자열의 정체지금까지 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용했다.string s = "EMMA"; 문자열은 결국 문자의 배열이다. s[0], s[1], s[2], ...와 같이 하나의 문자가 배열의 한 부분을 나타낸다. 가장 마지막의 \0은 0으로 이루어진 바이트로, 문자열의 끝을 표시하는 약속이다.변수 s는 결국 이러한 문자열을 가리키는 포인터가 된다.더 정확히는 문자열의 가장 첫 번째 문자, 즉 주소 0x123에 있는 s[0]을 가리킨다. string의 정의실..
[CS50] 배열 - 문자열의 활용
TIL
문자열 길이 구하기문자열에서 문자를 검색하거나 특정 문자를 바꾸려면 어떻게 해야 할까? 사용자로부터 문자열을 입력받아 한 글자씩 출력하는 프로그램을 만들어보자. for 루프로 문자열의 인덱스를 하나씩 증가시키면 되는데, 문자열의 끝은 어떻게 알 수 있을까?한 가지 방법은 널 종단 문자 \0와 일치하는지 검사하는 것이다.for (int i = 0; s[i] != '\0'; i++){ // ...} 하지만 strlen() 함수를 사용하면 더 효율적이다.#include #include #include int main(void){ string s = get_string("Input: "); printf("Output:\n"); for (int i = 0, n = strlen(s); i st..
[CS50] 배열 - 문자열과 배열
TIL
문자열은 배열이다지금까지 문자열을 저장하기 위해 string 자료형을 사용했다. '문자열'은 문자가 '나열되어 있다' 또는 '배열되어 있다'는 의미다. C에서 string은 정확히 어떻게 정의되어 있을까? 문자열(string) 자료형은 사실 문자(char) 자료형의 배열이다. 문자 배열string s = "HI!";와 같이 문자열 s가 정의되어 있다고 가정해보자. s는 문자의 배열이므로 메모리상에 다음과 같이 저장되며, 인덱스로 각 문자에 접근할 수 있다.가장 끝의 \0은 널 종단 문자로, 문자열의 끝을 나타낸다. 모든 비트가 0인 1바이트를 의미한다. 2차원 배열여러 문자열이 동시에 선언된 경우를 살펴보자.string names[4];names[0] = "EMMA";names[1] = "RODRIGO"..