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


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

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

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

  • 2016년 01월 29일에 작성됨

조회수 287


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);
}
  • 2016년 01월 29일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close