문자열: 메모리에 저장된 일련의 연속된 문자(character)들의 집합
" " 를 사용하여 표현한다.
C언어에서는 문자형(char) 배열을 이용하여 저장한 것을 말한다.
이때 마지막 값에 null을 넣게된다. (문자열의 끝을 알아보기 위해)
char str01[] = "This is a string.";
// 크기를 지정하지 않아도 알아서 크기가 지정됨 (문자 개수 + 1(NULL))
char str02[7] = "string"; // 크기를 지정한 문자열 변수 선언
char str03[] = { 'a', 'b', 'c', '\0' }; // '\0' == NULL
▼ 빈 배열로 초기화 방법
char str[30] = {'\0'}; // 널 문자로 초기화
char str[30] = {0}; // 널 문자의 아스키코드 값으로 초기화
char str[30] = ""; // 큰따옴표 안에 아무것도 없으므로 널 문자로 초기화
char str[30];
str[0] = '\0'; // 첫 번째 배열 요소만 별도로 초기화
문자열의 출력은 %s를 사용한다.
char str[] = "string";
printf("%s", str);
printf(str); // 이렇게 써도 출력 가능함
널문자는 문자열의 끝이 어디인지 알아보기 위해 꼭 넣어주어야 한다.
이를 이용하여 문자열의 길이를 구할 수 있다.
int str_len = 0;
char str[] = "string";
while (str[str_len] != '\0') {// 널 문자가 나올 때까지 반복
str_len++;
}
printf("이 문자열의 길이는 %d입니다.\n", str_len);
이때 널문자의 아스키코드 값은 0으로 조건식에 '\0' 대신 0을 사용해도 된다.
문자열은 문자형의 배열이므로 원소 값에 접근하거나 값을 변경할 수 있다.
printf("%c\n", "This is a string"[2]); // i 가 출력됨
char str[] = "house";
str[0] = 'm';
문자형 포인터 변수에 직접 문자열을 저장한다. (문자열의 시작 주소가 저장된다.)
이 포인터 변수 값을 읽어오는 것은 가능하지만 각 원소에 접근하여 값을 변경하는 것은 불가능하다.
(여기에서 포인터가 가리키고 있는 곳이 변수가 아니라 주소이기 때문에 주소값을 연산할 수 없다.)
char *pstr = "Good Day";
pstr = "Bye"; // 가능
pstr[1] = 'i'; // 불가능
이 경우에는 각 원소에 접근 가능함
void main()
{
char s[] = “hello”;
char *ptr;
ptr = s;
while (*ptr != ‘\0’)
{
printf(“%c“, *ptr);
ptr++;
}
printf("\n");
}