void func(char str[])
{
str[0]='X'; //=>에러
cout<<str;
}
void main()
{
/*
char str[100]="Hello"; //변수형태의문자열
str[0]='X'; //-> Xello
char*str2="Hello";
str2[0]='X'; // 상수형태의문자열 =>에러
*/
func("hello");
}
func함수에서 에러가뜨는데
char str[]로 문자열을 받아도 상수형태의 문자열을 받은거로 취급됨?
char *로 받아봐
"hell o"가 문자열 상수니까 바꿀수 없는 듯
char*str로해도 안됨
main함수에서 char str[100]="Hello"; str[0]='X"는 되는거같은데
'hello'가 텍스트 세그먼트에 저장이 되어 수정이 불가능해 집니다
변수저장공간과 상수저장공간따로있음 변수는 접근및수정가능인데 상수는 접근만가능 수정불가 이렇게알고있는데 자세히는모름
메인에서 str은 str[100]으로 선언이 먼저 되어 메모리에 배열이 할당된 후에 데이터가 들어간거고 함수에 "hello"를 인자로 넣을때는 기존에 할당된 공간이 없으므로 자동으로 메모리 공간에 (텍스트 세그먼트) 상수 처리가 된거야 char* str="hello" 메인에서 이렇게 해도 수정이 안되는것과 동일하지.
요약해서 말하면 공간을 미리 정해주지 않았기 때문에 'h' 'e' 'l' 'l' 'o' '\0' 이렇게 컴파일 타임에 사이즈에 맞게 할당되고 write 불가!
답변 감사합니다