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

조회수 6088회

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);
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)