본문 바로가기

C 언어

C 언어 0.03 - 문자열 ( string )

선언 ( Declare )


아래와 같이 선언해주면 된다.

 

유의할 점

 

  • %s 사용할 것
  • string 타입은 문자열의 끝을 컴퓨터에게 알려주기 위해서 ' \0 ' 을 반드시 넣기 때문에 문자열의 길이 + 1 을 반드시 해줘야한다.
  • 원하는 배열의 크기 + 1 반드시 해줘야 한다~
  • Null 의 아스키코드는 0 이다. <=> 문자 '0' 의 아스키코드는 48
/* 문자열의 시작 */
#include <stdio.h>
int main() {
  char sentence_1[4] = {'P', 's', 'i', '\0'};
  char sentence_2[4] = {'P', 's', 'i', 0};
  char sentence_3[4] = {'P', 's', 'i', (char)NULL};
  char sentence_4[4] = {"Psi"};
  
  char word[] = {"long sentence"};  // 알아서 원소의 수를 세어서 크기를 넣어라.
  const char *str = "abcdefghi";    // pointer 이용해서 선언 ( 배열은 주소이기 때문에 가능 )

  printf("sentence_1 : %s \n", sentence_1);  // %s 를 통해서 문자열을 출력한다.
  printf("sentence_2 : %s \n", sentence_2);
  printf("sentence_3 : %s \n", sentence_3);
  printf("sentence_4 : %s \n", sentence_4);

  return 0;
}

 

포인터 배열 VS 문자열 배열


/* 문자열 */
#include <stdio.h>
int main() {

  // 문자열 배열
  char str[] = "sentence";            // 변경 가능
  
  // 포인터 배열
  char *pstr = "sentence";            // 변경 불가

  char temp[] = "hello";
  
  str = temp;                         // 불가능
  pstr = temp;                        // 가능
  
  str[0] = 'A'                        // 가능
  pstr[0] = 'a'                       // 불가능

  printf("str : %s \n", str);
  printf("pstr : %s \n", pstr);

  return 0;
}

 

리터럴의 경우 stack이 아닌 오직 읽기만 가능한 곳에 저장되어 있다. 고로 변경 불가 

대신 다른 문자열을 복사할 수 있다.

const 타입이라고 보면 된다.

 

포인터를 활용한 값 변경 


/* copy_str 사용 예제 */
#include <stdio.h>
int copy_str(char *src, char *dest);

int main() {
  char str1[] = "hello";
  char str2[] = "hi";

  printf("복사 이전 : %s \n", str1);

  copy_str(str1, str2);

  printf("복사 이후 : %s \n ", str1);

  return 0;
}

int copy_str(char *dest, char *src) {
  while (*src) {
    *dest = *src;
    src++;
    dest++;
  }

  *dest = '\0';

  return 1;
}

배열은 주소값으로 이뤄져 있으므로 포인터를 사용하여 값을 변경해주면 배열을 복사하는 메모리를 아낄 수 있어서 유용하다.

'C 언어' 카테고리의 다른 글

C 언어 0.05 - 포인터 ( pointer )  (0) 2021.10.30
C 언어 0.04 - 배열 ( array )  (0) 2021.10.30
C 언어 0.02 - fgets vs scanf  (0) 2021.10.27
C 언어 0.01 - 변수 (variable)  (0) 2021.10.27
[INTRO] - 왜 C언어를 알아야 할까?  (0) 2021.10.26