C언어에서 문자열 상수(string literal) 값은 큰따옴표("")로 감싼 문자열! 문자열 상수 값이 할당된 메모리는 읽기만 가능하다.
#define BUFFER_SIZE 50
char str[BUFFER_SIZE] = "taekgeun";
str[4] = 0
printf("%s\n", str); // taek
위의 예제를 살펴보면, 배열 변수 str 값에 문자열 상수 값("taekgeun") 을 할당했다. 이 경우 str은 문자열 상수 값을 복사하여 자기 메모리 위치에 같다 놓는다. 그렇기에 값을 수정할 수 있는 것이다.
char *str= "taekgeun";
*(str+4) = 0 // 포인터 연산
printf("%s\n", str); // error!!
다만 문자열 상수를 포인터 변수로 수정하려고 하면 해당 메모리의 값을 그대로 사용하기 때문에 error가 발생한다. 이렇게 발생한 에러는 컴파일러 log에도 나타나지 않아 디버깅 하기 힘들다..
(오류에도 컴파일 오류, 디버깅 오류, 논리 오류 등.. 여러 종류가 있다고 한다. 한번 알아보자.)