배열과 문자열 관계
배열 개념을 이해하면서 문자열과도 함께 생각해 볼 수 있다.
원시적인 C 언어는 기본적으로 자체적인 문자열 자료형을 제공하지 않음.
따라서 C 언어에서는 문자(Character)를 여러 개 묶어 놓는 형태로 문자열을 표현
▶ char형 배열을 이용해서 문자열 저장과 변경도 가능해진다.
(C++에서는 자체적으로 string 자료형 제공)
char str[7] = "hi dev"; // 공백 포함해서 6자
char str[] = "hi dev"; // 자동으로 크기를 결정한다.
※ 문자열의 저장을 목적으로 char형 배열을 선언할 경우에는
특수문자 '\0'이 저장될 공간까지 고려해서 배열의 길이를 결정해야 한다.
따라서, 위의 경우 글자는 6자이지만 '\0'을 포함해서 길이가 7이 되는 것이다!
char s[20];
scanf("%s", &a); // %s 형식 지정자를 사용.
※ 널 문자가 존재하면 문자열이고,
널 문자가 존재하지 않으면 문자열이 아니다.
※ 널 문자와 공백은 엄연히 다르다.
#include <stdio.h>
void main() {
char nu = '\0'; // 널 문자
char sp = ' '; // 공백
printf("ㅁ%cㅁ%cㅁ", nu, sp); // 문자열에서 차이 보기
printf("\n");
printf("%d %d", nu, sp); // 아스키 코드값에서의 차이
}
문자형태로는 둘의 차이를 볼 수 없지만.
정수형태로 출력해보면 아스키 코드 값이 다른 것을 확인할 수 있다.
#include <stdio.h>
void main() {
char str[50];
int idx = 0;
scanf("%s", str);
printf("입력 받은 문자열: %s \n", str);
while (str[idx] != '\0') {
printf("%c", str[idx]);
idx++;
}
printf("\n");
}
반복문을 통해서 정상 출력되는 것을 통해 scanf()를 통해 받은 문자열 끝에는 널 문자가 삽입되었음을 알 수 있다.
(사실상, C언어에서 표현하는 모든 문자열의 끝에는 널 문자가 자동으로 삽입된다.)
이처럼 끝에 널문자가 필요한 이유는 메모리상에서 문자열은 이진 데이터로 저장되기 때문에
문자열의 시작과 끝을 구분하기 위해서이다.
※ 아래와 같이 마지막에 널 문자가 있어야 문자열이라고 할 수 있다.
char arr[] = {'H', 'i', '~'};
char arr[] = {'H', 'i', '~', '\0'};
※ scanf()로는 한 문자열을 받을 수 있지, 한 문장을 받을 수는 없다.
이는 scanf 함수가 데이터를 구분 짓는 기준이 공백이기 때문이다.
위의 경우에는 "hello", "world" 이렇게 총 2개의 문자열이 입력된 경우이다.
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] calloc( ) & realloc( ) (0) | 2021.03.20 |
---|---|
[C] 문자열 (0) | 2021.03.20 |
[C] 배열 선언 및 초기화 (0) | 2021.03.20 |
[C] 문자열 배열과 문자열 배열 동적 할당 (0) | 2021.03.20 |
[C] 함수의 선언 (0) | 2021.03.19 |
댓글