본문 바로가기

프로그래밍/C언어

[C언어] 배열(2)에 대해 알아보자.

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.




오늘은 배열의 두번째 시간입니다. 전 시간에 말씀드린 것과 같이 문자 배열과 문자열에 대해서 알아 보겠습니다.


1)문자열


문자열을 저장하기 위해서는 char 배열을 사용 하여야 합니다. 문자열 상수는 문자열을 큰따옴표(" ") 로 묶은 것으로 문자열을 char 배열에 저장하는 방법은 다음과 같습니다.


char str[] = "Hello"; 


char 배열을 생성하여 문자열 Hello를 저장하는 것입니다. 수행결과는 다음과 같습니다.



str 배열에 hello를 저장하긴하였는데 맨 끝에 \0은 무엇일까요 ? \0을 널(Null) 문자라고 하는데 문자열의 끝을 알려주는 역활을 합니다. 그래서 char 배열의 길이는 5가 아닌 \0을 포함한 6이 됩니다. 


만약 char str[] = { 'H', 'e', 'l', 'l', 'o'}라고 선언한 후 출력을 하면 어떻게 될까요 ? \0(널 문자)를 포함하지 않았기 때문에 \0문자를 만날때 까지 다른 메모리공간에 저장된 내용까지 출력하고 심지어는 무한루프에 빠질 수 도 있습니다. 


char str[] = { 'H', 'e', 'l', 'l', 'o'} 를 올바르게 선언하려면 char str[] = { 'H', 'e', 'l', 'l', 'o','\0'}으로 바꾸어야 할 것입니다.


문자열을 출력하기 위해서는 printf함수의 지시자 '%s'를 사용합니다. 

예제를 통해서 살펴 보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#pragma warning(disable:4996)
int main(void) {
    char str[20];
    int i;
    printf("문자열을 입력하세요\n");
    scanf("%s", str);
 
    printf("입력한 문자열은 %s 입니다.\n", str);
 
    
    return 0;
}
 
 
cs


scanf 함수는 지시자가 %s 인경우 입력 받은 문자열의 마지막에 자동으로 \0(Null 문자)를 넣어 줍니다. 


char str[20] 을 선언하였는데 scanf 함수에서 길이가 20을 넘어가는 문자를 입력하게 되면 배열의 범위를 벗어난 저장공간까지 사용하게 됩니다. 그것을 방지 하기 위해 scanf("%19s",str)을 사용하여 20을 넘어가지 않게 해야합니다. 왜 %20이 아니고 %19를 해야하는지는 아시죠 ? 마지막에 \0을 넣어 주어야 하기 때문입니다.


이상으로 문자열 배열에 대해서 알아보았습니다. 다음시간에는 2차원배열에 대해서 알아보도록 하겠습니다.


수고하셨습니다.