반응형
문자열
문자열은 컴퓨터 메모리 구조상에서 마지막에 널(NULL) 값을 포함.
널 값은 문자열의 끝을 알리는 목적으로 사용
C 언어에서 표현하는 모든 문자열의 끝에는 널 문자가 자동으로 삽입된다고 보면 됩니다.
// 마지막에 널 문자가 없으므로 단순 문자 배열
char arr[] = {'H', 'i', '~'};
// 마지막에 널 문자가 있으므로 문자열
char arr[] = {'H', 'i', '~', '\0'};
while(str[idx] != '\0'){
// 널문자가 없다면 끝을 알 수 없음
printf("%c", str[idx++]);
}
[예제] 널 문자
#include <stdio.h>
int main(void) {
char str[50] = "I like C programming";
printf("%s \n", str);
str[8] = '\0';
printf("%s \n", str);
str[6] = '\0';
printf("%s \n", str);
}
ex) "I like C programming"라고 입력하면
scanf는 "i am c programmer"를 입력해도 공백으로 구분하기 때문에 "i" 만 입력받게 됩니다.
따라서, 문자열을 입력받기 위한 다른 함수가 필요.
※ 문자열의 끝에는 '\0' 널문자가 저장됨 따라서 공간 크기를 고려할 때 주의
char str[5] = "Go !"
char str[] = "Go !" // 이 형태도 가능 (문자열 크기 5로 할당됨)
※ 널문자와 공백은 다른 것입니다. 실제 아스키코드만 봐도 다릅니다.
char nu = '\0'; // 널 문자
char sp = ' '; // 공백
printf("%d %d", nu, sp); // 0과 32 출력
문자열 형태로 포인터를 사용하면 포인터에 특정한 문자열의 주소를 넣게 됩니다.
포인터로 문자열을 선언했다고 하더라도 기존의 배열처럼 처리할 수 있습니다.
#include <stdio.h>
int main(void){
char *a = "Hello World";
printf("%c\n", a[1]);
printf("%c\n", a[4]);
printf("%c\n", a[8]);
}
str 배열명이 하나의 포인터 역할을 하기 때문에 &str
(문자열 끝에 널 문자가 존재)
char str[50]
scanf("%s", str); // 문자열을 입력 받아서 배열 str에 저장
관련 문제
- [Jungol] 1880 암호풀기(Message Decowding)
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] [전처리기] #ifdef (0) | 2021.03.20 |
---|---|
[C] calloc( ) & realloc( ) (0) | 2021.03.20 |
[C] 배열과 문자열 관계 (0) | 2021.03.20 |
[C] 배열 선언 및 초기화 (0) | 2021.03.20 |
[C] 문자열 배열과 문자열 배열 동적 할당 (0) | 2021.03.20 |
댓글