1 분 소요

❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.


#include <stdio.h>

int main(void)
{
  char *s = "EMMA";
  // ✅ s는 문자열의 첫 주소(&s[0])이고, * 를 이용해 그 값을 찾아간다면 E라는 값이 있을 것이다.
  printf("%c\n", *s); // E
  printf("%c\n", *(s + 1)); // M
  printf("%c\n", *(s + 2)); // M
  printf("%c\n", *(s + 3)); // A
}

아래는 사용자에게 두 문자열을 입력받아 같은지 비교하는 코드입니다.

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

int main(void)
{
    // 사용자로부터 s와 t 두 개의 문자열 입력받아 저장
    string s = get_string("s: ");
    string t = get_string("t: ");

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

위 코드를 실행한 뒤 EMMA, EMMA를 입력해보면 “Different”가 출력됩니다.

같은 문자를 입력했음에도 “Different”가 출력되는 이유가 무엇일까요?
이전 시간에 string 자료형은 사실 char * 자료형이라고 했습니다.
따라서 stget_string()으로 받아오는 문자열의 “주소”를 담고 있기 때문에,
문자열을 비교할 때 문자열이 저장된 변수를 바로 비교하게 되면 그 변수가 저장되어 있는 주소가 달라 “Different”가 출력되는 것입니다.

만약 위 코드에서 의도한대로 문자열의 “값”을 비교하는 코드는 어떻게 작성해야 할까요?

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

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

    // 두 문자열을 비교 (각 문자들을 비교)
    for (int i = 0; i < strlen(s); i++) {
      if (*(s + i) != *(t + 1)) { // // 포인터가 가르키는 문자 비교
        printf("Different\n");
        return 0;
      }
    }
    printf("Same\n");
}
#include <cs50.h>
#include <stdio.h>
#include <string.h>

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

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


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: