|
음 제가 다시 한번 물어볼께여..^^;
지금 나오미님께서 되신다는게..
char *ptr = "test";
라고 했을때
*(ptr + 1) = 'r'; <- 이 부분이 되신다는 건가여..?
저는 gcc, vc에서 해보았는데여..
김백일님이 말한거 처럼..상수형으로 선언이 된다면
변경이 안되야지 정상인되여..ㅡㅡ;
const char* ptr = "test"; 이거하고 같지않나여..?
나오미 님이 쓰신 글 :
: 제가 테스트 해본 결과 로는 잘 되었습니다.
: 혹시 그러한 내용이 원칙적으로는 지원되지 않는 부분인데
: 컴파일러(볼랜드 계열)의 특정 버젼부터 지원해준 것일까
: 하는 생각이 문득 들어 TC 2.0에서 동일한 내용을 컴파일
: 해봤는데, 역시 변경이 가능하더군요.
:
: 더 정확히 이야기 해보자면 그와 같은 형태의 문장은
: 문법적 에러는 없습니다.
: 하지만 논리적 에러를 유발할 경향이 큰 문장이며
: 권장할만한 내용은 되지 못합니다(현재의 선언이
: 포인터 변수이기 때문에).
:
: char * ptr = "test";
:
: "test"라는 문자열이 메모리의 어디엔가 할당되어지고
: 그 선두 번지가 ptr에 들어 있을것입니다.
: 이 "test"라는 문자열은 CRT Heap에 할당됩니다.
: 이것은 프로그램이 알아서 관리해주기 때문에
: 그곳이 어디인지는 정확히 알 수 없을 것입니다.
:
: ptr = "TEST";
:
: 라는 문장을 수행했다면 이것 또한 가능합니다.
: 하지만 이곳의 메모리 번지는, "test"가 있는
: 곳이 아닌 다른 곳의 주소일것입니다.
:
: 혹 어느 컴파일러를 사용하시는지요?
:
|