Notice
일상에서 멍때리기
[C] char[] 와 char *의 차이 본문
반응형
내가 얼마나 무지하면 어지껏 이 차이도 몰랐단 말인가.
약간의 삽질과 구글링을 통해 알아낸 내용이다.
너무도 간단하게 배열 = 포인터 라는 지식이 불러온 삽질이라 할 수 있다.
먼저 두 예제를 보자
1
code
- char str [ ] = "Hello World" ;
- str[3] = '3' ;
- printf ( "%s \n " , str ) ;
result
Hel3o World
2
code
- char *str = "Hello World" ;
- str[3] = '3' ;
- printf ( "%s \n " , str ) ;
result
Segmentation Fault (Core Dumped)
코드상 큰 차이가 없어보이지만 선언 부의 작은 차이가 만들어 낸 결과이다.
1번의 char[] 의 경우 local data를 가지는 포인터이기 때문에 수정이 가능하다
하지만 2번의 char* 의 경우 global static data를 할당한 후 그의 포인터를 가지는 것이기 때문에 수정이 불가능 한것이다.
좀 더 자세히 gcc -S 로 어셈블리 코드를 보게되면
1번 char[] 의 경우
.file "test.c"
.text
.globl main
.type main, @function
main:
2번 chat* 의 경우
.file "test.c"
.section .rodata
.LC0:
.string "Hello World"
.text
.globl main
.type main, @function
main:
반응형
'프로그래밍 > 개발이야기' 카테고리의 다른 글
Ripple Effect ( 물결 효과, 왜곡 효과 ) (0) | 2014.04.21 |
---|---|
ruby on rails 폴더 구조 (0) | 2014.04.14 |
[C] trim - string 함수 구현 (0) | 2014.04.14 |
[C/C++] ++i 와 i++ 의 차이 (0) | 2014.04.14 |
Comments