글쓴이: 익명 사용자 / 작성시간: 화, 2002/07/16 - 7:52오후
언제가 이 게시판에서
코드영역에 쓰여진것은 read only이므로 고칠수없다고 했는데.
#include
int main(int argc, char* argv[])
{
char *p;
p = "abcdef";
printf("%s\n", p );
p[0]='X';
printf("%s\n", p );
getchar();
return 0;
}
문제 없이 수행되네요^^
어케된거죠?
Re: 코드영역에 쓰여진 문자열상수를 에디팅함에도 에러가 없네
>언제가 이 게시판에서
>코드영역에 쓰여진것은 read only이므로 고칠수없다고 했는데.
'코드영역' 같은 용어는 C언어에서는 사용하지 않습니다.
메모리 영역을 지칭하는 등의 용어는 C언어에서는 존재하지 않습니다.
단지 read-only이기 때문에 무조건 적으로 불가능하다라고 볼수 없습니
다.
ISO/IEC98991999(E) 표준문서에 의하면 character string literal을 수
정하는 행위에
대한 결과를 "undefined"이라고 정의하고 있습니다.
'불가능'이 아니라 undefined이라고 정의한 것입니다. 어떤경우엔 가능하
기도 하다는 의미입니다.
char p1[] ="Always writeable.";
char *p2 = "possibly not writable";
const char p3[] = "Never writable"; /* ISO c ONLY */
p1[0] = 'x'; 은 가능합니다.
p2[0]= 'x'; 은 어떤 경우엔 가능하기도 합니다 하지만 어떤경우엔
run-time error를 발생시킬수도 있습니다.
p3[0] = 'x';은 전혀 가능하지 않습니다. complie-time error를 발생시킵
니다.
이와 같은 이유로 해서,
일반적으로 string literal가 저정된 메모리의 내용을 수정하지 말라고
하는 것입니다.
참고로 다음의 이야기도 읽기 바랍니다.
ISO C 표준에서는 동일한 문자열을 가진 2개의 문자열이
동일한 메모리 영역을 사용할 수 도 있도록 하였습니다. 표준이전의 C에
서는 동일한 문자열이라 할지라도 서로 다른 메모리 영역을 사용하도록
하였었습니다.
즉, 표준 ISO C에서는
char *string1, *string2;
string1 = "abcd";
string2 = "abcd";
위의 두 문자열이 동일한 메모리 영역을 사용할 수 도있다는 것입니다.
즉 string1 == string2 와 같은 경우도 생길 수도 있다는 것입니다.
댓글 달기