char* 의 초기값 관련해서 궁금합니다.
글쓴이: 호기심천국 / 작성시간: 화, 2018/06/12 - 3:10오후
char* str; str = malloc(512); str[0] = '1'; str[1] = 0x0; printf("%s", str);
char* str = "2"; str[0] = '1'; str[1] = 0x0; printf("%s", str);
char* 형은 문자열 상수로 수정이 안되는 것으로 알고있는데요
위 첫번째 코드는 사실 수정?이 일어났는데도 정상적으로 출력이 가능하고 두번째 코드는 오류가 발생합니다.
두번째 코드에서 두번째 라인에 str = malloc(); 을 해주면 첫번째 코드처럼 1이 출력되지만, 당연히 초기 값인 2는 사라지더군요.
realloc을하면 역시 오류가 발생합니다.
결국 초기값을 주느냐 안주느냐에 따라서 다른것 같은데, 정확히 어떤점이 다른지 알고싶습니다.
(bss영역, data영역에 기록되는 차이때문인가요?)
Forums:
...
첫번째 건 str이 가리키는 메모리가 heap에 할당됩니다. read/write가 모두 가능하구요. 두 번째는 char *str = "2" 처럼 해두면, 먼저 "2"가 메모리에 잡히는데 보통은 read only 영역입니다. 그걸 str로 가리키게 되고요. 그래서 str[0]에 쓰려고 하면 에러가 생겨요.
char str[] = "2" 처럼 하면 아마 "2"가 들어가기에 충분한 array를 str의 scope (함수 안에 str을 선언한다면 스택)에 만듭니다. 그래서 이 경우엔 read/write가 가능합니다.
댓글 달기