실행 파일이 실행 되면, 그 안에 내용들은 조각 조각 나서 메모리에 부분 따로 올려지게 되는데
다른 에러가 나는 컴파일러들은 초기화된 문자열들을 read only쪽 영역에 넣는게 아닌가 싶네요.
char[] 일때호 char* 일때 문자열 위치를 보시면 주소값이 많이 다릅니다.
보통 저런 초기화된 데이타라면(전역이나 static등으로 선언) 그 위치는 데이타 영역에 있게 되는데
거론하신 다른 컴파일러들은 데이타 영역이 아닌 다른 곳에 있는거 같네요.
이명훈 님이 쓰신 글 :
: 알파 님이 쓰신 글 :
: : : literal_p가 "Hello C"라는 문자열 상수를 가리키고 있고
: : : 그것의 값을 변경할 수 없기 때문에,,
: : : 실행중 오류가 나야한다고 하는데,
: : :
: : : 제가 할 때는 오류가 발생하지않고 잘 실행되었습니다..
: : : ,이유가 무엇 때문인지 궁금합니다.
: : :
: :
: : 원래 그게 정상입니다.
: :
: : const 추가해 보세요.
: :
: : 값 변경시 에러 메시지 뜨며 컴파일 중단될 겁니다.
:
:
: 알파님 답변 감사합니다.
:
: 그런데, 먼저 적은 소스를 Dev C++나 VisualStudio로 컴파일해서 만들어진 실행파일을 실행하면,
:
: 정말 실행 중 오류가 나서 프로그램을 닫거나 디버그하라는 말이 나옵니다.
:
:
: 실행중 에러가 나지 않으려면,
:
: 포인터가 문자열 상수를 지적하게 하지 말고,
:
: 배열에다 문자열을 넣고 사용하라는데, 위의 코드를
:
: 아래와 같이 배열로서 사용할 때는 Dev C++, VisualStudio에서도 실행중 에러가 발생하지 않았습니다.
:
:
#include
: #include
:
: int main(void)
: {
: char arr[] = "Hello C";
:
: arr[6] = 'J'; // 1번
: puts(arr);
:
: strcpy(arr, "Hello C"); //2번
: puts(arr);
:
: return 0;
: }