내가 만약
char* filename;
선언해놓고
filename = "brotherhelp";
그 다음에
filename = "sisterhelp"
하면
1. "brotherhelp"는 정적 메모리영역에 계속 남나요?
2. 다시 filename = "brotherhelp"하면 filename은 이전과 같은 주소를 가리키나요?
3. "brotherhelp"와 "sisterhelp"가 문자열 상수로서 정적메모리영역에 있는건 언제부터에요?
프로그램이 실행되고 소스코드가 data영역에 있을때부터 인가요?
char 포인터에 직접 문자열을 넣는건 컴파일 타임에만 가능 char* = "asdf"; 이런식으로
런타임에는 동적할당해서 메모리를 잡아준 뒤에 문자열을 넣을 수 있음
ㄴ 횽 나머지도 답변해줘 히잉~
filename은 문자열의 시작을 가르키는 포인터야
strcpy 같은걸 써서 다른 문자열을 넣더라도 시작 주소는 같지
일단 니가 예로 든것 자체가 에러임 단순 char포인터에 문자열을 넣을순 없으니 위에 말한것처럼 메모리 할당을 해줘야겠지
음.. 문자열을 char형 포인터에 넣는게 아니라, 큰따옴표로 이루어진 문자열 상수를 가리킨다고 보는게 맞는거 아닌가요? 실수나 정수와 같은 상수는 그 쓰임이 보이면 목적코드 안에 그 영역이 할당됩니다. 문자열 "상수"도 이와 같은 맥락이라고 보시면 되겠죠. 실제로 저 코드를 VS상에서 빌드하고 발생한 exe파일을 hexdump 시켜보면 저 문자열이 프로그램 내부에 저장되어 있음을 확인할 수 있습니다. 저 프로그램이 적재되고 프로세스로서 동작할 때 저 부분이 메모리로 불러들여오면서 저 문자열 상수가 가리키는 지점을 char형 포인터가 가리킨다고 보는것이 맞는 것 같아요.