선언 ( 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 |