C언어: 리터럴 스트링
Whether string literals can overlap and whether successive evaluations of a string-literal yield the same object is unspecified. That means that identical string literals may or may not compare equal when compared by pointer.
내용이 완전히 같은 리터럴 스트링이어도 평가(evaluation)될 때마다 다른 주소에 assign될 수 있다.
그러나 어떤 컴파일러는 내용이 같은 리터럴 스트링을 한 메모리 주소에만 assign한다.
리터럴 스트링 두 개를 이어붙이면 컴파일러는 자동으로 하나로 join 시킨다.
"aaa"
"bbb"
-> "aaabbb"
리터럴 스트링은 rvalue 로 쓰일 때, 포인터가 decay된다. 포인터에 할당할 수 있으며, subscript 사용도 가능하다.
Ex)
char ch;
ch = "abc"[1] //b
주의) 리터럴 스트링을 수정하려는 시도는 undefined behavior를 초래한다.