문자 배열의 초기화를 목적으로 사용된 문자열 상수 질문입니다.
, 최 봉준님이 작성char str[5]="ABCD";
문자열 상수(string literal)는 프로그램 종료시까지 메모리에 유지된다고 공부하였습니다. 그렇다면 "문자 배열의 초기화"를 목적으로 사용된 문자열 상수도 종료시까지 메모리에 존재하나요?
위와 같은 초기화를 허락하는 이유가 ={'A', 'B', 'C', 'D', '\0'}; 처럼 일일이 초기값을 나열해야 한다는 불편함 때문이라면, char str[5]="ABCD"는 char str[5]={'A', 'B', 'C', 'D', '\0'} 표현과 100% 동일한 표현이라 생각되며, 또 그렇게 치환(?) 될 것이라 생각됩니다. 그렇다면 "문자 배열의 초기화"를 목적으로 사용된 문자열 상수는 프로그램 종료시까지 메모리에 존재할 필요가 없을것 같은데.. 확신이 안서네요..
회신: 문자 배열의 초기화를 목적으로 사용된 문자열 상수 질문입니다.
, 도장_ 관리자님이 작성https://en.wikipedia.org/wiki/Data_segment
리터럴은 데이터 세그먼트에 있습니다. 따라서 프로그램이 종료될 때까지 있습니다.
더 자세한 내용은 컴파일러 이론에서 배울 수 있으며 해당 파트만 다룬 책으로는 <Linkers and Loaders>가 있습니다.
https://www.amazon.com/Linkers-Kaufmann-Software-Engineering-Programming/dp/1558604960