"char s[]"랑 "char *s"는 뭐가 다른가요?

C에서는 문자열을 저장할 때

  • char s[] = "hello";
  • char *s = "hello";

같이 2가지 방법이 있는데 이 둘의 차이는 뭔가요? 컴파일할 때, 실행할 때 실제로 메모리상에서 어떤 일이 일어나는지 알고 싶습니다.

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    char *s = "Hello world";의 경우

    char *s = "Hello world";는 메모리의 읽기 전용인 부분에 "Hello world"를 쓰고, s가 그 위치를 가리키게 합니다. 이 메모리 영역에는 이제 다른 걸 쓰지 못합니다.

    int main(){
        char *s = "Hello World";
        s[0] = "h"; //읽기 전용에 쓰려고 함. 에러!
        printf("%s", s);
    }
    

    char s[] = "Hello world";의 경우

    char s[] = "Hello world";는 메모리의 읽기 전용 영역에 "Hello world"를 넣고, 스택에 이 문자열을 복사해 줍니다. 스택 영역은 써도 되는 부분이기 때문에 전자보다 수정이 쉽습니다.

    int main(){
        char s[] = "Hello World";
        s[0] = "h"; //가능
        printf("%s", s);
    }
    

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.