본문 바로가기

C-Language/String CONSTANT

String CONSTANT

포인터로 문자열을 선언하면 Data Segment에 저장되며 상수로 취급되고,
문자열을 배열로 선언하면 구성문자를 변경할 수 있는 변수로 취급된다

#include <stdio.h>

/* 문자열 상수와 문자열 변수 */

int main(void) {

 /* 아래처럼 문자열을 배열로 선언하면 문자열을 구성하는 문자 하나하나를
 *  변경할 수도 있게 되는 문자변수로 취급된다 */

 char str_arr[] = "Hello World";
 
 /* 포인터로 문자열을 선언하면 그 문자열은 Data Segment에 생성되며
 *  이후에 다시 동일한 문자열을 선언하면 다시 생성하는 것이 아니라
 *  해당 문자열의 주소만 넘겨 주는 방법을 사용한다 */

 char *sample = "Hello World"; // Stack이 아닌 Data Segment에 생성됨

 /* 아래에서 위와 동일한 문자열을 생성하지만 이미 Data Segment 에 동일
 *  문자열이 생성되어 있기 때문에 그 문자열의 주소만 추출하여 전달한다
 * 결국 sample, test 두 변수는 동일한 주소를 참조한다  */

 char *test = "Hello World";

 /* 결국 아래의 3개의 문자열 주소는 모두 동일하게 된다 */

 printf("%d, %d, %d\n", "Hello World", sample, test);

 /*****************************************************************/

 /* 위에서 포인터로 선언한 문자열은 Data Segment에 저장되며 상수로 취급되므로
 *  그 내용을 변경할 수 없게 된다.그러므로 문자열을 구성하는 문자를 수시로 변경
 *  할 계획이라면 포인터로 문자열을 선언할 것이 아니라 배열을 이용해야 한다
 *  즉, 아래와 같이 문자열 상수의 값을 변경하려는 경우는 안된다

 sample[0] = 'A';
 printf("%s \n", sample);
 */

 /* 배열로 선언한 문자열은 그 구성 문자를 변경할 수 있다 */
 str_arr[0] = 'h';
 str_arr[6] = 'w';
 printf("%s \n", str_arr);
}