"char s[]"랑 "char *s"는 뭐가 다른가요?
조회수 6090회
C에서는 문자열을 저장할 때
char s[] = "hello";
char *s = "hello";
같이 2가지 방법이 있는데 이 둘의 차이는 뭔가요? 컴파일할 때, 실행할 때 실제로 메모리상에서 어떤 일이 일어나는지 알고 싶습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
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); }
댓글 입력