컴퓨터/C

C 문자열 변수와 문자열 상수

sayyesdoit 2022. 11. 10. 21:36
 1 char str1[5] = "abcd";
 2 char *str2 = "ABCD";

1: 요소가 char형인 str1이라는 이름의 배열을 선언하고, 대입 연산자 오른쪽에 선언된 문자열을 저장하고 있다. 따라서 배열 st1이 저장하고 있는 문자열은 변수가 된다. 문자열 전체를 저장하고 있는 것이다.

2: 대입 연산자의 왼쪽에 char형 포인터를 선언하고, 오른쪽에는 "ABCD"를 가리키겠다는 의미가 된다. 따라서 str2는 문자열의 첫 문자 'A'를 가리키게 된다. 포인터의 타입이 char*인 이유도 여기에 있다. 메모리상에 저자오디어 있는 문자열 상수 "ABCD"를 단순히 가리키고만 있다. 문자열 상수는 메모리 공간에 저장이 되면, 그 순간에 문자열 상수의 주소 값이 반환된다.

출처: 열혈강의 C 프로그래밍

#include <stdio.h>

int main(void) {
  char str1[5]="abcd"; //문자열 변수 선언
  char *str2="ABCD"; //문자열 상수 선언
  
  printf("%s\n", str1);
  printf("%s\n", str2);
  
  str1[0]='x'; //문자열 변수 변경, OK!
  str2[0]='x'; //문자열 상수 변경, Error!
  
  printf("%s\n", str1);
  printf("%s\n", str2);
  
  return 0;
}