|
선언때문에 그런건데요..
정확히 어디에서 부터 어디까지인지는 모르지만
C컴파일러를 구현하면서 컴파일러에 따라 구현이 달라지는 경우가 있거든요
님의 문제도 그런 부분이구요.
문제가 되는 부분은
char *m1 = "Korea";
이 부분입니다.
포인터가 korea를 가르키고 있는 상황인데 "korea"라고 사용자가
메모리 할당을 하지 않고 사용할 경우 write 금지가 되어있어서 에러가 나는 거죠
왜 그런지는 모르구요.
어떤 컴파일러에서는 되고 어떤 컴파일러에서는 안 된다는 건
정확히 정해진 룰이 없다는 이야기 같네요.
포인터의 증가나 포인터와 연산자의 계산 결과 등의 문제에서
간혹 컴파일러에 따라 결과가 달라지는 경우를 본 것 같습니다.
참 글구 에러없이 돌리시려면
char m1[6] = "kOrea"; 라든가
char *m1 = malloc(...)와 같이 하면 되요.
차이점은 첫 줄은 배열로 메모리를 잡아준거고
두번째는 malloc으로 메모리를 잡아준거죠.
타입체크가 심한 VC++에서 사용자의 실수를 줄이기 위해서 그렇게 한건지
어떤건지 그 이유는 저두 궁금하네요^^
그럼 수고하세요
|