[CS50] 문자열 비교

제리·2022년 6월 12일
0

CS50

목록 보기
5/13

문자열 비교

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string s = get_string("s: ");
    string t = get_string("t: ");

    if (s == t)
    {
        printf("Same\n");
    }
    else
    {
        printf("Different\n");
    }
}

위 코드를 실행해보면 s와 t에 같은 문자를 넣어도 다르다고 출력된다

왜그럴까?

s와 t가 각각 다른 메모리에 저장되었기 때문이다.
첫번째 메모리 공간이 0x123, 두번째 메모리 공간이 0x456이라고 하자
그럼 컴퓨터는 (s==t) 라는 조건문을 만났을때 서로의 메모리 주소를 비교한다.
그래서 같지않다고 출력되는 것이다.

컴퓨터는 포인터가 어디에 있는지 어떻게 알까?

위의 코드에서 cs50라이브러리를 없앤다면

char *s = get_string("s: "); // char *s : s가 문자의 주소를 저장한다는 의미
char *t = get_string("t: "); // char *t : t가 문자의 주소를 저장한다는 의미

이런식으로 변경해줘야 할 것이다.

cs50 라이브러리에서 get_string() 이 반환하던 값은 "메모리 공간의 첫 바이트 주소"다.
즉, get_string()은 호출될때 마다 포인터를 반환한다.

s와 t가 반환받은 포인터(메모리 공간의 첫바이트 주소)를 저장하기 때문에 컴퓨터는 포인터가 어디에 있는지 알 수 있다.

profile
iOS 준비중

0개의 댓글